查看: 1335|回复: 2

[角蜂鸟AI套件] [征集/转载] 图像识别器(底层API教程)

[复制链接]

主题

好友

7410

积分

状元

  • TA的每日心情

    4 天前
  • 签到天数: 343 天

    连续签到: 4 天

    [LV.8]以坛为家I

    发表于 2018-8-20 09:53:24 |显示全部楼层
    SqueezeNet 1000类图像识别器[color=var(--MAIN-ANCHOR-color)][size=0.5em]
    本章为您介绍如何使用角蜂鸟在Python调用底层API实现基于SqueezeNet的图像识别器。
    比起检测器,识别器可从图片分析得到较细的分类类别,例如猫、狗的某个品种。
    • 本教程基于Ubuntu 16.04系统

    路径和文件[color=var(--MAIN-ANCHOR-color)][size=0.5em]
    • 人脸识别Python:SungemSDK-Python/examples/apps/ImageRecognition/ImageRecognition.py
    • 模型文件:SungemSDK-Python/examples/graphs/graph_sz

    图像识别 Image Recognition
    在ImageRecognition目录下执行以下命令来启动 图像识别 范例。
    ~/SungemSDK/examples/apps/ImageRecognition$ python3 ImageRecognition.py
    识别目标图像为青色框中区域(ROI)的图像部分。通过按 ‘w’ 与 ’s’ 可调整 ROI 的大小。
    得到 Top5 结果例如: 属于计算机键盘概率98.39%、空格1.40%、打字机键盘0.22%、笔记本0.03%、仓鼠0.00%。
    因为调用全部函数为底层API,终端不显示任何提示。
    参数设置初始化
    # Load device (载入设备)
    devices = hs.EnumerateDevices()
    dev = hs.Device(devices[0])
    dev.OpenDevice()# Load CNN model (载入模型)
    with open('../../graphs/graph_sz', mode='rb') as f:
            b = f.read()
    graph = dev.AllocateGraph(b)
    dim = (227,227)
    # Load classes (载入分类标签)
    classes=np.loadtxt('../../misc/image_category.txt',str,delimiter='\t')
    # Set camera mode (摄像头模式)
    if WEBCAM: video_capture = cv2.VideoCapture(0)
    两种模式(WEBCAM):
    • True时使用外接USB摄像头
    • False时使用角蜂鸟内置摄像头
    图像识别
    # 裁切出ROI区域
    sz = image_raw.shape
    cx = int(sz[0]/2)
    cy = int(sz[1]/2)
    ROI = int(sz[0]*ROI_ratio)
    cropped = image_raw[cx-ROI:cx+ROI,cy-ROI:cy+ROI,:]
    # 前处理
    cropped = cropped.astype(np.float32)
    cropped[:,:,0] = (cropped[:,:,0] - 104)
    cropped[:,:,1] = (cropped[:,:,1] - 117)
    cropped[:,:,2] = (cropped[:,:,2] - 123)
    # 图像数据传入角蜂鸟并排序分类结果
    graph.LoadTensor(cv2.resize(cropped,dim).astype(np.float16), 'user object')
    output, userobj = graph.GetResult()
    output_label = output.argsort()[::-1][:5]
    可视化
    # 输出文字
    for i in range(5):
            label = re.search("n[0-9]+\s([^,]+)", classes[output_label]).groups(1)[0]
           cv2.putText(image_raw, "%s %0.2f %%" % (label, output[output_label]*100), (20, 50+i*30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 255), 2)
    # 画框
    cv2.rectangle(image_raw, (cy-ROI, cx-ROI), (cy+ROI, cx+ROI),(255,255,0), 5)
    # 显示图像
    cv2.imshow('Result',image_raw)
    # 检测键盘输入
    key = cv2.waitKey(1)
    if key == ord('w'):
           ROI_ratio += 0.1
    elif key == ord('s'):
           ROI_ratio -= 0.1
    if ROI_ratio < 0.1:
           ROI_ratio = 0.1
    输入result,输出画框之后的图像。之后通过OpenCV函数来显示图像。


    回复

    使用道具 举报

    主题

    好友

    6761

    积分

    管理员

    该用户从未签到

    发表于 2018-8-20 09:59:28 |显示全部楼层
    排版有问题,请查实修改
    回复

    使用道具 举报

    主题

    好友

    7410

    积分

    状元

  • TA的每日心情

    4 天前
  • 签到天数: 343 天

    连续签到: 4 天

    [LV.8]以坛为家I

    发表于 2018-8-20 12:13:44 |显示全部楼层
    satoll 发表于 2018-8-20 09:59
    排版有问题,请查实修改

    修改了下,可以了吗
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /3 下一条

    手机版|电路城

    GMT+8, 2019-6-17 05:42 , Processed in 0.140563 second(s), 14 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz!

    返回顶部