摄像头教程

乐动掌控2.0内置摄像头,可用于实现人脸检测、人脸识别、二维码识别等图形、图像AI应用编程教学。

  • 模型类型:

    • 人脸检测:用于检测人脸的模型,能同时检测多张人脸,可获取人脸位于画面中的位置,以及获取人脸中眼、鼻、嘴等关键部位坐标。

    • 人脸识别:用于识别是否为固定人员的AI模型,同时也能检测人脸位于画面中的位置,以及获取人脸中眼、鼻、嘴等关键部位坐标。

    • 二维码识别:用于识别二维码或条形码,能够获取到二维码内容和条形码内容。

    • 运动检测:用于检测画面是否有人员在运动或画面是否有在移动变化。

    • 猫狗识别:用于检测是否为猫或狗的模型,可同时识别多只猫或狗。

人脸检测

在控制台打印人脸数量。

图形化代码

../../../../../_images/face_detection.png

图形化代码

Python代码

# 引入相关库
from mpython import *
import AIcamera
import time

# 设置检测标记变量,用于更新数据
isDetect = False

# 检测回调
def cb(_):
    global isDetect
    isDetect = True # 当检测到人脸时把标记设为真

# 设置模型
AIcamera.init(AIcamera.FACE_DETECTION, cb)

while True:
    if isDetect: # 当标记为真表示检测到了
        # 获取检测结果并把值赋给res变量
        res = AIcamera.get_result()
        print('人脸数量:' + str(len(res)))
        isDetect = False # 清除检测标记
    time.sleep(0.1)

备注

获取检测结果,检测到的人脸框选位置及关键点坐标(口左角,口右角,鼻,左眼,右眼)。结果为元组类型。
结构:({'box': (x1, y1, x2, y2), 'keypoint': (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)}, ...)
box 为人脸位置,人脸框左上角坐标(x1, y1),右下角坐标(x2, y2)
keypoint 为关键点,分别为:口左角(a0, a1)、口右角(a2, a3)、鼻(a4, a5)、左眼(a6, a7)、右眼(a8, a9)

人脸识别

在控制台打印人脸名称(假设录入了张三和李四)、人脸置信度及人脸位置。

图形化代码

【1】录入人脸

../../../../../_images/face_recognition_enter.png

图形化代码

【2】识别人脸

../../../../../_images/face_recognition.png

图形化代码

Python代码

【1】录入人脸

# 引入相关库
from mpython import *
import AIcamera

# 设置标记变量,用于更新数据
isDetect = False

# 设置模型
AIcamera.init(AIcamera.FACE_RECOGNITION, lambda _: None)

# 设置A键按钮回调,当按A键时录入人脸数据
def on_button_a_pressed(_):
# 执行录入人脸操作
AIcamera.send_command(AIcamera.ENROLL)

# 设置B键按钮回调,当按B键时删除人脸数据
def on_button_b_pressed(_):
# 执行删除人脸操作
AIcamera.send_command(AIcamera.DELETE)

# 绑定A/B按钮事件
button_a.event_pressed = on_button_a_pressed
button_b.event_pressed = on_button_b_pressed

备注

添加人脸或删除人脸时需要画面中检测到人脸才能操作
添加人脸数据时ID会从1递增
删除人脸数据时会从最后一个数据向前删除直到为0
已录入的数据会保留在内存中,不会随程序停止而清空。(建议每次录入前都先删除掉所有数据)

【2】识别人脸

# 引入相关库
from mpython import *
import AIcamera
import time

# 设置标记变量,用于更新数据
isDetect = False

# 识别回调
def cb(_):
    global isDetect
    isDetect = True # 当识别到人脸时把标记设为真

# 设置模型
AIcamera.init(AIcamera.FACE_RECOGNITION, cb)

while True:
    # 运行识别
    AIcamera.send_command(AIcamera.RECOGNIZE)
    if isDetect: # 当标记为真表示识别到了
        # 获取识别结果并把值赋给res变量
        res = AIcamera.get_result()
        face_id = res.get('id')
        if face_id == 1:
            print('这是张三')
        elif face_id == 2:
            print('这是李四')
        print('置信度:' + str(res.get('Similarity')))
        print('人脸位置:' + str(res.get('box')))
        isDetect = False # 清除识别标记
    time.sleep(0.1)

备注

获取识别结果,检测到的人脸ID、置信度、框选位置及关键点坐标(口左角,口右角,鼻,左眼,右眼)。结果为字典类型。
结构:{'box': (x1, y1, x2, y2), 'Similarity': sim, 'keypoint': (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)}
box 为人脸位置,人脸框左上角坐标(x1, y1),右下角坐标(x2, y2)
Similarity 为置信度
keypoint 为关键点,分别为:口左角(a0, a1)、口右角(a2, a3)、鼻(a4, a5)、左眼(a6, a7)、右眼(a8, a9)

二维码识别

通过识别二维码控制电灯的开和关。

图形化代码

../../../../../_images/qr_recognition.png

图形化代码

Python代码

# 引入相关库
from mpython import *
import AIcamera
import time

# 设置识别标记变量,用于更新数据
isDetect = False

# 识别回调
def cb(_):
    global isDetect
    isDetect = True # 当识别到二维码时把标记设为真

# 设置模型
AIcamera.init(AIcamera.CODE_SCANNER, cb)

while True:
    if isDetect: # 当标记为真表示识别到了
        try:
            # 获取识别结果并把值赋给res变量
            qr_txt = AIcamera.get_result()
            if qr_txt == 'open':
                print('开灯')
            elif qr_txt == 'close':
                print('关灯')
        except: pass
        isDetect = False # 清除识别标记
    time.sleep(0.1)

备注

获取识别结果,识别结果为二维码内容。结果为字符串类型。

运动检测

检测是否有在运动,并在控制台打印运动状态

图形化代码

../../../../../_images/motion_detection.png

图形化代码

Python代码

# 引入相关库
from mpython import *
import AIcamera
import time

# 设置检测标记变量,用于更新数据
isDetect = False

# 识别回调
def cb(_):
    global isDetect
    isDetect = True # 当检测到运动时把标记设为真

# 设置模型
AIcamera.init(AIcamera.MOTION_DEECTION, cb)

while True:
    if isDetect: # 当标记为真表示识别到了
        print('有在运动')
        isDetect = False # 清除识别标记
    else:
        print('没有运动')
    time.sleep(0.1)

猫狗检测

在控制台打印猫脸的数量。

图形化代码

../../../../../_images/cat_detection.png

图形化代码

Python代码

# 引入相关库
from mpython import *
import AIcamera
import time

# 设置检测标记变量,用于更新数据
isDetect = False

# 检测回调
def cb(_):
    global isDetect
    isDetect = True # 当检测到猫脸时把标记设为真

# 设置模型
AIcamera.init(AIcamera.CAT_FACE_DETECTION, cb)

while True:
    if isDetect: # 当标记为真表示检测到了
        # 获取检测结果并把值赋给res变量
        res = AIcamera.get_result()
        print('猫脸数量:' + str(len(res)))
        isDetect = False # 清除检测标记
    time.sleep(0.1)

备注

获取检测结果,检测到的猫/狗脸框选位置。结果为元组类型。
结构:({'box': (x1, y1, x2, y2), ...}, ...)
box 为猫/狗脸位置,猫/狗脸框左上角坐标(x1, y1),右下角坐标(x2, y2)