『壹』 人臉關鍵點檢測最先進的演算法
閱面科技的人臉關鍵點檢測演算法可以適用於各種姿態,角度、和表情變化的人臉,並且安裝包僅有4M多大小,速度很快,可以實時對視頻中的關鍵點進行檢測。
『貳』 股票上漲突破關鍵點有幾種演算法,怎麼算的
一、股票上漲空間分析
1、從主力建倉成本看上漲空間。所謂建倉成本就是上方套牢籌碼全部割肉出局,主力在低位收聚廉價籌碼的成本,主力成本的計算標准一般以建倉區籌碼密集峰的中心軸的價格為准,如果是雙峰密集區,以兩個密集峰中心軸價位的平均值為標准。確認主力成本後就可以預測拉升空間了。如果主力直接拉升一波後就出貨的拉升空間一般在60%——100%之間,如果拉升一波後經過洗盤在拉升的前後的拉升空間一般在100%——160%之間。所以要正確區分洗盤與出貨的區別。
2、從歷史高點看上漲空間。所謂歷史高點就是上一波牛市的最高點或歷史最高點。如果大盤過歷史高點,那麼個股過歷史高點就風險不會太大,如果大盤離歷史高點很遠而個股卻創歷史新高或接近歷史高點,需要防止因心理壓力或漲幅過大超前透支而導致的高位風險。如果個股的主力建倉成本離歷史高點還有60%以上的空間一般是安全的。因為歷史新高遲早會破的。
3、從形態真空區看上漲空間。如果股價進入某形態真空區,一般真空區結束就會有一定的阻力,注意防範風險。如果股價突破主力建倉籌碼真空區,可看高40%—60%的上漲空間,如果股價突破主力洗盤真空區可看高最少20%以上的上漲空間(區分洗盤和出貨假突破的區別)。
4、從套牢區的壓力位看上漲空間。如果前期高位是主力被套(由於突然的利空),後期上漲會突破主力套牢區。如果前期高位是散戶被套,若套牢籌碼多於15%,那麼股價上漲到該套牢區會受到很大的壓力。主力被套的籌碼特徵是窄而密集多於30%,散戶被套經過割肉之後的籌碼特徵是短而分散。
5、從業績增長情況看上漲空間。如果業績增長穩定可暫時看高一線,但漲幅過大也會導致一定的風險。如果業績下滑而股價又被高估也會有一定的風險。如果股價在底部,即使業績不好也不要害怕,所謂「底部利空猛打猛沖,高位利好撒腿就跑」就是這個道理。
6、從牛熊行情來看上漲空間。如果是牛市,股價回調多少後期就會漲多少,甚至會大大超過下跌空間,如果是熊市,股價這一波跌多少後期反彈只能收復三分之一的位置,最多不會超過二分之一上漲幅度。
二、上漲空間應該注意的幾個細節
1、中小盤股的上漲空間比大盤股的上漲空間更大。
2、控盤程度越高的上漲空間越大。控盤程度可以從吸籌的時間、振幅、籌碼密集程度看出來,吸籌時間越長吸籌越充分,控盤程度也越高;振幅越小控盤程度越高;籌碼越密集甚至單峰密集主力控盤程度越高。主力控盤程度越高說明主力實力月雄厚,准備越充分,爆發力越強,上漲空間也越大。
3、題材股不是上漲空間的必要條件,一定要結合主力的運作階段、控盤程度、套牢情況而定,萬萬不要認為只要有題材就一定會漲。
4、股性和人氣對上漲空間有一定的影響,股性好的人氣旺的股票經常會被頻繁炒作,其上漲空間也會相對大一些。股性和人氣從過去的漲幅情況、成交量和換手率上加以判斷。
『叄』 sift演算法中特徵點和關鍵點是同一個描述么都是指一個像素單元還是指什麼
特徵點和關鍵點都是同一個概念,還可以叫做興趣點,它們都是角點,是指一個梯度的大小和方向變換都很快的像素點。
『肆』 圖的關節點
圖關節點求法 c++ :
#include <iostream>
#include <fstream>
#include <string>
#include <deque>
using namespace std;
ifstream fin("fin.in");
#define nnode 1000
deque <int> node[nnode];
int n;
void readin(){
int m;
fin>>n;
int i,j;
for(i=0;i <n;i++){
fin>>m;
node.resize(m);
for(j=0;j <m;j++){
fin>>node[j];
}
}
}
deque <int> visited,low,is;
int min(int a,int b){
if(a>b) return b;
return a;
}
void foo(){
visited.resize(nnode,0);
is.resize(nnode,0);
low.resize(nnode,-1);
int cur,i;
deque <int> stack;
int ct=1;
stack.push_front(0);
visited[0]=ct++;
while(stack.size()!=0){
cur=stack[0];
stack.pop_front();
if(low[cur]==-2){
low[cur]=visited[cur];
for(i=0;i <node[cur].size();i++){
if(visited[node[cur]] <visited[cur])
low[cur]=min(low[cur],visited[node[cur]]);
else{
if(low[node[cur]]>=visited[cur]) is[cur]=1;
low[cur]=min(low[cur],low[node[cur]]);
}
}
continue;
}
if(low[cur]!=-1) continue;
low[cur]=-2;
stack.push_front(cur);
for(i=0;i <node[cur].size();i++){
int temp;
temp=node[cur];
if(visited[temp]!=0) continue;
stack.push_front(temp);
visited[temp]=ct++;
}
}
}
int main(){
readin();
foo();
for(int i=0;i <n;i++){
cout < <low < <" ";
}
cout < <endl;
for(i=0;i <n;i++){
if(is==1) cout < <i < <" ";
}
cout < <endl;
return 0;
}
『伍』 點雲數據處理的5個步驟
摘要 1. 點雲濾波(數據預處理)
『陸』 dfa演算法的關鍵點是什麼
起因: 從網頁中爬去的頁面,需要判斷是否跟預設的關鍵詞匹配(是否包含預設的關鍵詞),並返回所有匹配到的關鍵詞 。
目前pypi 上兩個實現
但是其實包都是基於DFA 實現的
這里提供源碼如下:
#!/usr/bin/python2.6
# -*- coding: utf-8 -*-
import time
class Node(object):
def __init__(self):
self.children = None
# 標記匹配到了關鍵詞
self.flag = False
# The encode of word is UTF-8
def add_word(root,word):
if len(word) <= 0:
return
node = root
for i in range(len(word)):
if node.children == None:
node.children = {}
node.children[word[i]] = Node()
elif word[i] not in node.children:
node.children[word[i]] = Node()
node = node.children[word[i]]
node.flag = True
def init(word_list):
root = Node()
for line in word_list:
add_word(root,line)
return root
# The encode of word is UTF-8
# The encode of message is UTF-8
def key_contain(message, root):
res = set()
for i in range(len(message)):
p = root
j = i
while (j<len(message) and p.children!=None and message[j] in p.children):
if p.flag == True:
res.add(message[i:j])
p = p.children[message[j]]
j = j + 1
if p.children==None:
res.add(message[i:j])
#print '---word---',message[i:j]
return res
def dfa():
print '----------------dfa-----------'
word_list = ['hello', '民警', '朋友','女兒','派出所', '派出所民警']
root = init(word_list)
message = '四處亂咬亂吠,嚇得家中11歲的女兒躲在屋裡不敢出來,直到轄區派出所民警趕到後,才將孩子從屋中救出。最後在徵得主人同意後,民警和村民合力將這只發瘋的狗打死'
x = key_contain(message, root)
for item in x:
print item
if __name__ == '__main__':
dfa()
『柒』 怎樣用kinect准確測量 人體身高
使用Kinect測量身高的方法其實有很多種:
第一種方式是使用Kinect的視場角以及結合一些三角形幾何運算,就可以大致測量出物體的高度,這一點在之前介紹深度影像處理的時候有提到。
第二種方式是使用Kinect骨骼追蹤提供的20個關節點的相關坐標,在根據一定的演算法測量出人體的身高。在Channel9上面的這個例子的一個分享,在這里拿過來和大家分享一下。在這里,根據臂展和身高有相似的關系,我對這個例子做了一點擴展,計算臂展來粗略計算身高,用臂展計算身高其實有個好處就是既可以使用正常模式(Normal model,20個關節點),可以使用坐姿模式(Seat model,10 個關節點),這樣您坐著就可以測量身高,不過精度不保證哈。這里只是提供這么一個思路。
一. 計算身高的演算法
Kinect獲取的骨骼數據包含20個關節點的X,Y,Z坐標信息。您可能會想,為什麼不直接使用頭部(head)關節點和腳趾(foot)關節點之間的距離來直接計算身高。這樣不準確,因為用戶可能並沒有站直,如果這樣算的話,誤差比較大。
另一個問題是,頭部關節點給出的是頭部中心點的位置,如果使用這個位置,您需要額外增加9至11厘米,但是即使這樣,也不能達到百分之一百的准確,如果要更精確一點的話,可能需要使用深度影像值來提取頭部的頂部位置。也不需要那麼麻煩,現在來看看我們怎樣使用骨骼關節點來計算高度信息。
仔細觀察下面的骨骼點,可以看到,身高可以由下面幾部分組成(如圖中紅色部分):
• 頭部(Head) –肩膀中心(ShoulderCenter)
• 肩膀中心(ShoulderCenter) – 脊柱中心(Spine)
• 脊柱中心(Spine) – 髖部中心(HipCenter)
• 髖部中心(HipCenter) – 左或右膝關節(KneeLeft or KneeRight)
• 左膝關節KneeLeft(右膝關節KneeRight) – 左踝關節leLeft (右踝關節AnkleRight)
• 左踝關節leLeft (右踝關節AnkleRight)- 左腳FootLeft (右腳FootRight)
使用臂展計算身高,也可以計算圖中綠色所示的關節點:
• 左手(HeadLeft) –左手腕(Wrist Left)
• 左手腕(Wrist Left) – 左胳膊肘(Elbow Left)
• 左胳膊肘(Elbow Left) – 左肩膀(Shoulder Left)
• 左肩膀(Shoulder Left)–肩膀中心(Shoulder Center)
• 肩膀中心(Shoulder Center)-右肩膀(Shoulder Right)
• 右肩膀(Shoulder Right)- 右胳膊肘 (Elbow Right)
• 右胳膊肘 (Elbow Right)- 右手腕(Wrist Right)
•右手腕(Wrist Right)- 右手 (Hand Right)
原理就是這樣,下面來編代碼實現。
二. 實現
程序界面很簡單,展示20個關節點,然後顯示計算結果。有幾點需要說明:
首先,關節點的位置信息是三維的,下面公式用來計算兩個關節點的距離
public static double Length(Joint p1, Joint p2)
{
return Math.Sqrt(
Math.Pow(p1.Position.X - p2.Position.X, 2) +
Math.Pow(p1.Position.Y - p2.Position.Y, 2) +
Math.Pow(p1.Position.Z - p2.Position.Z, 2));
}
上面的代碼很直接。第二步,我們應該使用左腿還是右腿還進行測量更加准確呢,我們使用那個追蹤的最好的。下面的代碼用來計算腿部處於追蹤狀態的點的數量。如果那個數量多,那麼就用那一個。
public static int NumberOfTrackedJoints(params Joint[] joints)
{
int trackedJoints = 0;
foreach (var joint in joints)
{
if (joint.TrackingState == JointTrackingState.Tracked)
{
trackedJoints++;
}
}
return trackedJoints;
}
使用上面的函數,我們就可以判斷是使用左腿還是右腿了。
// Find which leg is tracked more accurately.
int legLeftTrackedJoints = NumberOfTrackedJoints(hipLeft, kneeLeft, ankleLeft, footLeft);
int legRightTrackedJoints = NumberOfTrackedJoints(hipRight, kneeRight, ankleRight, footRight);
double legLength = legLeftTrackedJoints > legRightTrackedJoints ? Length(hipLeft, kneeLeft, ankleLeft, footLeft) : Length(hipRight, kneeRight, ankleRight, footRight);
然後我們使用擴展方法,來計算骨骼的高度。下面是方法的代碼:
public static double Height(this Skeleton skeleton)
{
const double HEAD_DIVERGENCE = 0.1;
var head = skeleton.Joints[JointType.Head];
var neck = skeleton.Joints[JointType.ShoulderCenter];
var spine = skeleton.Joints[JointType.Spine];
var waist = skeleton.Joints[JointType.HipCenter];
var hipLeft = skeleton.Joints[JointType.HipLeft];
var hipRight = skeleton.Joints[JointType.HipRight];
var kneeLeft = skeleton.Joints[JointType.KneeLeft];
var kneeRight = skeleton.Joints[JointType.KneeRight];
var ankleLeft = skeleton.Joints[JointType.AnkleLeft];
var ankleRight = skeleton.Joints[JointType.AnkleRight];
var footLeft = skeleton.Joints[JointType.FootLeft];
var footRight = skeleton.Joints[JointType.FootRight];
// Find which leg is tracked more accurately.
int legLeftTrackedJoints = NumberOfTrackedJoints(hipLeft, kneeLeft, ankleLeft, footLeft);
int legRightTrackedJoints = NumberOfTrackedJoints(hipRight, kneeRight, ankleRight, footRight);
double legLength = legLeftTrackedJoints > legRightTrackedJoints ? Length(hipLeft, kneeLeft, ankleLeft, footLeft) : Length(hipRight, kneeRight, ankleRight, footRight);
return Length(head, neck, spine, waist) + legLength + HEAD_DIVERGENCE;
}
同樣滴,我們使用手,手腕,胳膊肘,肩膀,等9個關節點來計算臂展,並使用臂展來近似計算身高,下面的名為ArmExtendWith的擴展方法即為計算臂展的方法。
public static double ArmExtendWith(this Skeleton skeleton)
{
var armWidthDeviation = 0.5;
var handRight = skeleton.Joints[JointType.HandRight];
var wristRight = skeleton.Joints[JointType.WristRight];
var elowRight = skeleton.Joints[JointType.ElbowRight];
var shoulderRight = skeleton.Joints[JointType.ShoulderRight];
var shoulderCenter = skeleton.Joints[JointType.ShoulderCenter];
var handleft = skeleton.Joints[JointType.HandLeft];
var wristleft = skeleton.Joints[JointType.WristLeft];
var elowleft = skeleton.Joints[JointType.ElbowLeft];
var shoulderleft = skeleton.Joints[JointType.ShoulderLeft];
// Calculate the left and right arm extends width
double rightArmExtendsWidth = Length(handRight, wristRight, elowRight, shoulderRight, shoulderCenter);
double leftArmExtendsWidth = Length(handleft, wristleft, elowleft, shoulderleft, shoulderCenter);
return rightArmExtendsWidth + leftArmExtendsWidth + armWidthDeviation;
}
最後,再SkeletonFrameReady事件中調用該方法即可。
void Sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
using (var frame = e.OpenSkeletonFrame())
{
if (frame != null)
{
canvas.Children.Clear();
Skeleton[] skeletons = new Skeleton[frame.SkeletonArrayLength];
frame.CopySkeletonDataTo(skeletons);
var skeleton = skeletons.Where(s => s.TrackingState == SkeletonTrackingState.Tracked).FirstOrDefault();
if (skeleton != null)
{
// Calculate height.
double height = Math.Round(skeleton.Height(), 2);
double armExtendsWidth = Math.Round(skeleton.ArmExtendWith(), 2);
// Draw skeleton joints.
foreach (JointType joint in Enum.GetValues(typeof(JointType)))
{
DrawJoint(skeleton.Joints[joint].ScaleTo(640, 480));
}
// Display height.
tblHeight.Text = String.Format("Height: {0} m", height);
tblArmExtendWidth.Text = String.Format("ArmWidth: {0} m", armExtendsWidth);
}
}
}
}
現在您可以運行代碼查看結果了。
三. 結語
本文介紹了兩種利用Kinect測量身高的方法,一種是之前講過的,利用Kinect的視場角和物體構成的三角關系,運用幾何運算,測量物體身高,第二種是利用Kinect提供的骨骼數據,根據關節點直接的距離,來計算人體的身高。本文著重講解了利用骨骼關節點之間的距離計算身高的兩種方法,一種是Channel9上面分享的利用頭部、脊柱、髖關節、膝關節、踝關節等8個關節點的長度來計算身高,還有一種就是使用與臂展相關的,手、手腕、胳膊肘、肩膀等9個關節點信息,較第一種方法相比,該方法可以使用坐姿模式進行計算,意味著您坐著就可以測量身高。當然,可能精度不是很准確,本文只是提供了一些Kinect在測量身高方面的思路,源代碼點擊此處下載,希望本文對您有幫助!
『捌』 c語言演算法
離散數學離散數學作為計算機學科的基礎是競賽中涉及最多的數學分支,重中之重又在於圖論和組合數學,尤其是圖論。圖論之所以運用最多是因為它的變化最多,而且可以輕易地結合基本數據結構和許多演算法的基本思想,較多用到的知識包括連通性判斷、DFS和BFS,關節點和關鍵路徑、歐拉迴路、最小生成樹、最短路徑、二部圖匹配和網路流等等。雖然這部分的比重很大,但是往往也是競賽中的難題所在,如果有初學者對於這部分的某些具體內容暫時感到力不從心,也不必著急,可以慢慢積累。組合數學競賽中設計的組合計數問題大都需要用組合數學來解決,組合數學中的知識相比於圖論要簡單一些,很多知識對於小學上過奧校的同學來說已經十分熟悉,但是也有一些部分需要先對代數結構中的群論有初步了解才能進行學習。組合數學在競賽中很少以難題的形式出現,但是如果積累不夠,任何一道這方面的題目卻都有可能成為難題。數論以素數判斷和同餘為模型構造出來的題目往往需要較多的數論知識來解決,這部分在競賽中的比重並不大,但只要來上一道,也足以使知識不足的人冥思苦想上一陣時間。素數判斷和同餘最常見的是在以密碼學為背景的題目中出現,在運用密碼學常識確定大概的過程之後,核心演算法往往要涉及數論的內容。計算幾何計算幾何相比於其它部分來說是比較獨立的,就是說它和其它的知識點很少有過多的結合,較常用到的部分包括—線段相交的判斷、多邊形面積的計算、內點外點的判斷、凸包等等。計算幾何的題目難度不會很大,但也永遠不會成為最弱的題。線性代數對線性代數的應用都是圍繞矩陣展開的,一些表面上是模擬的題目往往可以藉助於矩陣來找到更好的演算法。 ~