【K230嵌入式AI开发板测评】+手语简单识别篇(二)
<p>对于待识别的5个手指,它与色彩的对应关系如图10所示。</p><p> </p>
<p>图10 色彩对应关系</p>
<p > </p>
<p >以色彩标识手指的绘制程序为:</p>
<pre>
<code class="language-python">for i in range(5):
j = i*8
if i==0:
R = 255; G = 0; B = 0
if i==1:
R = 255; G = 0; B = 255
if i==2:
R = 255; G = 255; B = 0
if i==3:
R = 0; G = 255; B = 0
if i==4:
R = 0; G = 0; B = 255
pl.osd_img.draw_line(results_show, results_show, results_show, results_show, color=(255,R,G,B), thickness = 3)
pl.osd_img.draw_line(results_show, results_show, results_show, results_show, color=(255,R,G,B), thickness = 3)
pl.osd_img.draw_line(results_show, results_show, results_show, results_show, color=(255,R,G,B), thickness = 3)
pl.osd_img.draw_line(results_show, results_show, results_show, results_show, color=(255,R,G,B), thickness = 3)
gesture_str=gesture_res
pl.osd_img.draw_string_advanced( x_det , y_det-50,32, " " + str(gesture_str), color=(255,0, 255, 0))</code></pre>
<p> </p>
<p>那么除了所测试的3种手势外,还能识别出哪些手势呢?</p>
<p >共有9种手势,即fist(拳头)、five(五)、gun(枪)、love(喜爱 )、one(一)、six(六)、three(三)、thumbUp(翘拇指)、yeah(对)。</p>
<p > </p>
<p >定义和识别手势的程序为:</p>
<pre>
<code class="language-python"># 根据手掌关键点检测结果判断手势类别
def hk_gesture(self,results):
with ScopedTiming("hk_gesture",self.debug_mode > 0):
angle_list = []
for i in range(5):
angle = self.hk_vector_2d_angle([(results-results), (results-results)],[(results-results),(results-results)])
angle_list.append(angle)
thr_angle,thr_angle_thumb,thr_angle_s,gesture_str = 65.,53.,49.,None
if 65535. not in angle_list:
if (angle_list>thr_angle_thumb) and (angle_list>thr_angle) and (angle_list>thr_angle) and (angle_list>thr_angle) and (angle_list>thr_angle):
gesture_str = "fist"
elif (angle_list<thr_angle_s) and (angle_list<thr_angle_s) and (angle_list<thr_angle_s) and (angle_list<thr_angle_s) and (angle_list<thr_angle_s):
gesture_str = "five"
elif (angle_list<thr_angle_s) and (angle_list<thr_angle_s) and (angle_list>thr_angle) and (angle_list>thr_angle) and (angle_list>thr_angle):
gesture_str = "gun"
elif (angle_list<thr_angle_s) and (angle_list<thr_angle_s) and (angle_list>thr_angle) and (angle_list>thr_angle) and (angle_list<thr_angle_s):
gesture_str = "love"
elif (angle_list>5) and (angle_list<thr_angle_s) and (angle_list>thr_angle) and (angle_list>thr_angle) and (angle_list>thr_angle):
gesture_str = "one"
elif (angle_list<thr_angle_s) and (angle_list>thr_angle) and (angle_list>thr_angle) and (angle_list>thr_angle) and (angle_list<thr_angle_s):
gesture_str = "six"
elif (angle_list>thr_angle_thumb) and (angle_list<thr_angle_s) and (angle_list<thr_angle_s) and (angle_list<thr_angle_s) and (angle_list>thr_angle):
gesture_str = "three"
elif (angle_list<thr_angle_s) and (angle_list>thr_angle) and (angle_list>thr_angle) and (angle_list>thr_angle) and (angle_list>thr_angle):
gesture_str = "thumbUp"
elif (angle_list>thr_angle_thumb) and (angle_list<thr_angle_s) and (angle_list<thr_angle_s) and (angle_list>thr_angle) and (angle_list>thr_angle):
gesture_str = "yeah"
return gesture_str
</code></pre>
<p> </p>
<p>那这9个手势是怎样的形式呢?</p>
<p >由程序可知,这9个手势是以5个手指的状态来表现的,即手指是处于伸直状态还是弯曲状态。</p>
<p > </p>
<p>图11 手指排列顺序</p>
<p > </p>
<p >在图11中,若按由左至右的顺序来建立与数组angle_list[]的关系。并以“1”来表示伸直状态,以“0”来表示弯曲状态。则其判别条件就是看数组angle_list[]是否超过判别的角度,大于判别角,则为“0”,小于判别角,则为“1”。</p>
<p >这样我们就得到了9种手势的表现形式,见图12所示。</p>
<p > </p>
<p > </p>
<p>图12 9种手势</p>
<p> </p>
<p >掌握了前面的手势定义规则,就可以按照手语规范来改写手势识别程序,以得到手语识别的目标。</p>
<p >当然要识别完整的手语信息还是比较困难的,因为在手语中不仅仅是静态的手势,还包含着更复杂的动态手姿,如移动、环绕、摆动、翻转、屈展以及与身体状态相配合的手势等,是一个非常据有研究挑战性的课题。</p>
<p>完全能识别完整的手语信息这个是挑战</p>
Jacktang 发表于 2024-10-21 07:50
完全能识别完整的手语信息这个是挑战
<p>的确,其内容太多且复杂,但可以进行一些简单的尝试。</p>
页:
[1]