腾讯云会议借贷反欺诈 AF保险反欺诈 IAF内容分发网络 CDN容器服务 TKE腾讯云投屏 TCD对象存储 COS即时通信 IM云点播 VOD标准直播 LVB 云服务器ECS云数据库RDS版云安全中心(态势感知)智能语音交互微服务物联网应用(IOT)DDoS高防IPWeb应用防火墙 华为云WeLink数字化办公软件软件开发平台 DevCloud内容分发网络 CDN云硬盘 EVS弹性云服务器 ECS云容器引擎CCE对象存储服务 OBS虚拟私有云 VPC分布式消息服务 专有云 ABC Stack业务安全风控机器人平台ABC Robot人脸识别自定义模板文字识别百度机器学习BMLAI训练一体机图像识别 云服务器KEC云硬盘 (EBS)专属云 (KDC)云转码 (KMCT)金睛内容识别分布式数据库服务 蓝鲸自动化运维IDC云服务器Oracle运维 超越微服务治理平台超融合Cube基础设施平台DevOps咨询微服务咨询自动化运维平台BSM一站式应用管理PaaS平台超越容器云超越CMP一体化云管理平台BeyondDevOps解决方案 立体化监控工具DOSM数字运营服务管理DOLA数字化运维日志管理与分析DOEM数字化运维事件管理DOMC数字化运维监控中心 宏录制Windows软件Excel自动化SAP自动化软件大型机自动化Citrix自动化屏幕抓取软件GUI自动化软件Web自动化桌面自动化软件-RPA 启程3智能移动机器人至简2模块化关节玄极2可重构机械臂启明1服务机器人启程4全地形移动机器人启程3足球机器人 启智AI机器人启智ROS机器人 启智CV机器人启智模块机器人 智慧校园服务机器人智能安保机器人智能动态人脸识别立体监控机器人水面水质监测机器人智能实时人脸识别人证通系统智能识别监控管理系统智能识别无人机智能人脸比对搜索系统 蓝牙指纹仪E8智能虹膜锁人脸识别摄像头指纹人脸门禁考勤机立式人证合一核验终端双模人脸识别仪桌摆“人证合一”认证终端智能人脸识别摄像机智能虹膜人脸一体机手持人证合一核验终端多模态生物识别统一身份认证平台ABIS 天融信运维安全审计系统大数据安全网关系统天融信日志收集与分析系统天融信网络流量分析系统天融信网站安全监控系统天融信高级可持续性威胁安全监测系统天融信脆弱性扫描与管理系统(WEB扫描)天融信负载均衡系统天融信网页防篡改系统天融信态势感知系统天融信脆弱性扫描与管理系统天融信大数据分析系统天融信应用安全网关系统天融信风险探知系统天融信安全隔离与信息交换系统 天空卫士部署方式ITM内部威胁防护体系UCSG-ASWG统一内容安全网关UCSG-DSG统一内容安全网关UCSS软硬件一体平台MAG移动接入网关CASB云访问安全代理UCWI统一内容安全审查平台GatorCloud云安全平台ASEG增强型安全邮件网关ASWG 增强型Web安全网关DLP 数据防泄漏UCS统一内容安全架构内部威胁管理ITM技术 深信服行为感知系统BA下一代防火墙AF大数据智能平台云管平台aCMP服务器虚拟化广域网优化WOC一体化网关MIG软件定义统一储存系统EDS深信服企业级云aCloud深信服应用交付AD数据库安全审计系统上网行为管理AC深信服企业移动管理EMM安全感知平台SIP信服云眼 BIG-IP接入策略管理器BIG-IP 链路控制器电信级ANTBIG-IP DNS服务BIG-IP Local Traffic ManagerBIG-IP 云版本 移动应用安全网关移动安全邮件移动业务审计平台移动安全态势感知分析平台移动应用安全服务中心数字化安全工作间移动安全管理平台 工业SOC工控脆弱性扫描APT高级威胁检测工控IDS与审计网络流秩序分析网络流量融合探针天清入侵防御系统工业防火墙入侵检测IDS敏感数据加固保护应用安全渠道监测应用安全检测分析敏感数据分析检测应用安全加固平台漏洞扫描 General_Cloud Pak for Security Data ExplorerSOAR_Cloud Pak for Security 联想LeapIOT物联网平台联想LeapHD大数据平台联想LeapAI企业级人工智能平台 Z-Data Hub企业级大数据平台SaaS商业智能分析Y-Vivid Show一站式可视化大屏展示工具Y-Reporting一站式数据采集分析工具Desktop桌面智能数据分析工具X-Suite一站式大数据分析平台Z-Suite 大数据分析平台 社区版Transwarp Data Hub超融合大数据一体机分布式图数据库StellarDB分布式交易数据库KunDB分布式闪存数据库ArgoDB星环人工智能平台Sophon 新一代智能大数据云平台 Transwarp Data Cloud企业级一站式大数据综合平台Transwarp Data Hub 飞书_协同办公最新产品 e签宝云合同平台E签宝 税务风险检测系统客户管家T+订货商城易代账 - 代账运营管理系统工作圈-移动办公平台T+Cloud人财货客一体化管理软件智慧生意好生意进销存管理软件好会计企业财务管理软件T1 Plus微型企业管理好帮手T6财务、业务、生产一体化管理软件T3财务管理软件T+人财货客一体化管理软件 用友CRM企业营销服务管理平台用友PLM企业研发创新管理平台用友U8+成长型企业互联网应用平台用友HCM 人力资本管理平台用友智能工厂 智能制造现场管理平台用友U9 大中型离散制造企业管理平台用友 NC6 大型企业管理与电子商务平台U8 cloud_融合交易用友财务云NC Cloud大型企业数字化平台 薪巴巴分析云云应用中心Formtalk致信小程序致远微协同移动协同管理软件应用定制平台智慧党建管理平台G6-N政务协同软件政务协同OA办公管理软件信息交换中心致远A6+协同管理软件致远A8+协同管理软件 MAXHUB 高效会议平台 沃丰CEM_智能客户体验管理系统Udesk 新一代CC PaaSUdesk智能AI交互语音机器人ServiceGo 智能派单系统Udesk 智能质检系统Udesk智能云电销系统Udesk 新一代企业智能知识库系统Udesk Insight新一代客服数据分析Udesk新一代智能客服机器人Udesk 智能排班管理系统Udesk新一代高效智能工单管理系统Udesk 培训考试系统劳动力优化管理系统WFOUdesk新一代呼叫中心系统Udesk新一代在线智能客服管理系统 瀚高软件安全数据库V4数据库一体机HighGo DB企业版V5瀚高软件HighGo DB ZStack CMP 多云管理平台ZStack Mini 超融合一体机ZStack企业级分布式存储 ZStack云平台社区版ZStack云平台混合云版ZStack云平台企业版 InBiz内容业务平台InWise智能数据管理平台Indrive 企业内容协作平台edoc2企业内容服务平台 金融科技业绩展示大屏TeamVision 2 网络透镜NetVision流芯互联数据引擎互联数据应用平台AppMall天旦DBCube数据库性能管理网络性能管理 NPM业务性能管理 BPC 安超OS™ 2020 for vSphere通用型云操作系统安超OS™ 2020通用型云操作系统VCF企业级超融合产品H2CI企业级超融合产品vSAN企业级超融合产品企业级大数据服务ServiceUltra 企业级服务云平台OpsUltra 企业级自动化运维平台VMUltra 云管平台StorUltra 企业级云存储平台CloudUltra 企业级云平台 查看全部产品 腾讯云金融风控解决方案百度云金融行业解决方案指掌易金融移动业务安全解决方案启明星辰金融行业解决方案 腾讯云智慧市政解决方案庚顿数据智慧城市解决方案深信服新型智慧城市解决方案指掌易智慧物流解决方案腾信软创智慧工程解决方案 声网教育行业解决方案E签宝教育平台电子签名解决方案飞书教育行业解决方案华云数据教育行业解决方案 永洪科技医疗行业解决方案UiPath 医疗支付RPA解决方案Veeam医疗解决方案智领云医疗大数据平台解决方案 ZStack制造业行业解决方案法大大制造零售业解决方案云智慧制造行业解决方案华云数据制造行业解决方案 阿里云人脸识别门禁一体机解决方案百度云智能客服解决方案星环科技人工智能解决方案索信达智能标签解决方案 有孚混合云解决方案F5多云解决方案深信服同架构混合云解决方案博云容器云解决方案 有孚蓝鲸配置管理CMDB解决方案云智慧业务运维解决方案云智慧AIOps智能运维有孚蓝鲸智能运维解决方案 天融信数据安全解决方案深信服构建网端云敏捷安全结构解决方案指掌易军队移动终端安全解决方案Nutanix数据保护和灾难恢复解决方案浩瀚深度IDCISP信息安全管理解决方案 UiPath 银行业RPA解决方案UiPath 制造业RPA解决方案UiPath 业务流程自动化解决方案UiPath 呼叫中心RPA解决方案 查看全部方案 BDOS 应用云平台AgotoZ Linker自由便捷获得观脉服务私有云服务主机服务AIIWAN服务动态加速腾讯云容器服务 TKE天阳金融云服务接入平台华夏春松企业级云服务DOSM数字运营服务管理华云数据企业级大数据服务 护航科技IT 智能服务机器人应用系统监控服务网络安全离线体检服务护航科技移动式办公平台锐软科技大数据分析服务锐软科技大数据业务应用 企业级需求管理软件产品(Visual RM)企业级需求资产库平台(Visual-ERAR)规模化敏捷开发平台(Visual-Agile)企业级测试管理平台(Visual TM)组织级项目管理产品(Visual Project) 企业级元数据管控平台(Visual-EMDPI) 企业级应用生命周期管理平台(Visual-ALM) 春松客服Formtalk敏捷业务定制办公服务用友CRM企业营销服务管理平台BDOS 数字化运营 ISO20000咨询服务专项资源支持服务 查看全部服务
入驻Yun88网

+

上传企业资质

选取文件
企业入驻

首页 > 资讯中心 > 产品发布 > Agora新增支持Python:视频通话中也可做图像识别了

Agora新增支持Python:视频通话中也可做图像识别了

来源:声网Agora 时间:September 16, 2019 5:27:52 PM CST

近两年来,Python在众多编程语言中的热度一直稳居前五,热门程度可见一斑。Python 拥有很活跃的社区和丰富的第三方库,Web 框架、爬虫框架、数据分析框架、机器学习框架等,开发者无需重复造轮子,可以用 Python 进行 Web 编程、网络编程,开发多媒体应用,进行数据分析,或实现图像识别等应用。其中图像识别是最热门的应用场景之一,也是与实时音视频契合度最高的应用场景之一。

声网Agora 现已支持 Python 语言,我们还写了一份 Python demo,并已分享至 Github。本文将从 TensorFlow 图像识别讲起,并讲 TensorFlow 与 Agora Python SDK 结合,在实时音视频场景中实现图像识别。实现后的效果,如下图所示。

实时通话中成功识别左图中的人、椅子和显示器

TensorFlow图片物体识别

TensorFlow是Google的开源深度学习库,你可以使用这个框架以及Python编程语言,构建大量基于机器学习的应用程序。而且还有很多人把TensorFlow构建的应用程序或者其他框架,开源发布到GitHub上。所以我们今天主要基于Tensorflow学习下物体识别。

TensorFlow提供了用于检测图片或视频中所包含物体的API,详情可参考以下链接:

https://github.com/tensorflow/models/tree/master/research/object_detection

物体检测是检测图片中所出现的全部物体并且用矩形(Anchor Box)进行标注,物体的类别可以包括多种,例如人、车、动物、路标等。举个例子了解TensorFlow物体检测API的使用方法,这里使用预训练好的ssd_mobilenet_v1_coco模型(Single Shot MultiBox Detector),更多可用的物体检测模型可以参考这里:

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md#coco-trained-models-coco-models

加载库

  1. # -*- coding:
  2. utf-8 -*-
  3. import numpy as
  4. np
  5. import
  6. tensorflow as tf
  7. import
  8. matplotlib.pyplot as plt
  9. from PIL import
  10. Image
  11. from utils
  12. import label_map_util
  13. from utils
  14. import visualization_utils as vis_util

定义一些常量

  1. PATH_TO_CKPT = 'ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb'
  1. PATH_TO_LABELS = 'ssd_mobilenet_v1_coco_2017_11_17/mscoco_label_map.pbtxt'
  1. NUM_CLASSES = 90

加载预训练好的模型

  1. detection_graph = tf.Graph
  2. with detection_graph.as_default:
  3. od_graph_def = tf.GraphDef
  4. with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
  5. od_graph_def.ParseFromString(fid.read)
  6. tf.import_graph_def(od_graph_def, name='')

加载分类标签数据

  1. label_map = label_map_util.load_labelmap(PATH_TO_LABELS)
  1. categories = label_map_util.convert_label_map_to_categories(label_map,max_num_classes=NUM_CLASSES, use_display_name=True)
  1. category_index = label_map_util.create_category_index(categories)

一个将图片转为数组的辅助函数,以及测试图片路径

  1. def load_image_into_numpy_array(image):
  2. (im_width, im_height) = image.size
  3. return np.array(image.getdata).reshape((im_height, im_width, 3)).astype(np.uint8)
  4. TEST_IMAGE_PATHS = ['test_images/image1.jpg', 'test_images/image2.jpg']

使用模型进行物体检测

  1. with detection_graph.as_default:
  2. with tf.Session(graph=detection_graph) as sess:
  3. image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
  4. detection_boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
  5. detection_scores = detection_graph.get_tensor_by_name('detection_scores:0')
  6. detection_classes = detection_graph.get_tensor_by_name('detection_classes:0')
  7. num_detections = detection_graph.get_tensor_by_name('num_detections:0')
  8. for image_path in TEST_IMAGE_PATHS:
  9. image = Image.open(image_path)
  10. image_np = load_image_into_numpy_array(image)
  11. image_np_expanded = np.expand_dims(image_np, axis=0)
  12. (boxes, scores, classes, num) = sess.run(
  13. [detection_boxes, detection_scores, detection_classes, num_detections],
  14. feed_dict={image_tensor: image_np_expanded})
  15. vis_util.visualize_boxes_and_labels_on_image_array(image_np, np.squeeze(boxes), np.squeeze(classes).astype(np.int32), np.squeeze(scores), category_index, use_normalized_coordinates=True, line_thickness=8)
  16. plt.figure(figsize=[12, 8])
  17. plt.imshow(image_np)
  18. plt.show

检测结果如下,第一张图片检测出了两只狗狗

实时音视频场景下TensorFlow物体识别

既然Tensorflow在静态图片的物体识别已经相对成熟,那在现实场景中,大量的实时音视频互动场景中,如何来做物体识别?我们现在基于声网实时视频的SDK,阐述如何做物体识别。

首先我们了解视频其实就是由一帧一帧的图像组合而成,所以从这个层面来说,视频中的目标识别就是从每一帧图像中做目标识别,从这个层面上讲,二者没有本质区别。在理解这个前提的基础上,我们就可以相对简单地做实时音视频场景下Tensorflow物体识别。

(1)读取Agora实时音视频,截取远端视频流的图片

  1. def onRenderVideoFrame(uid, width, height, yStride,
  2. uStride, vStride, yBuffer, uBuffer, vBuffer,
  3. rotation, renderTimeMs, avsync_type):
  4. # 用 isImageDetect 字段判断前一帧图像是否已完成识别,若完成置为True,执行以下代码,执行完置为false
  5. if EventHandlerData.isImageDetect:
  6. y_array = (ctypes.c_uint8 * (width * height)).from_address(yBuffer)
  7. u_array = (ctypes.c_uint8 * ((width // 2) * (height // 2))).from_address(uBuffer)
  8. v_array = (ctypes.c_uint8 * ((width // 2) * (height // 2))).from_address(vBuffer)
  9. Y = np.frombuffer(y_array, dtype=np.uint8).reshape(height, width)
  10. U = np.frombuffer(u_array, dtype=np.uint8).reshape((height // 2, width // 2)).repeat(2, axis=0).repeat(2, axis=1)
  11. V = np.frombuffer(v_array, dtype=np.uint8).reshape((height // 2, width // 2)).repeat(2, axis=0).repeat(2, axis=1)
  12. YUV = np.dstack((Y, U, V))[:height, :width, :]
  13. # AI模型中大多数模型都是RGB格式训练,声网提供的视频回调数据源是YUV格式,我们做下格式转换
  14. RGB = cv2.cvtColor(YUV, cv2.COLOR_YUV2RGB, 3)
  15. EventHandlerData.image = Image.fromarray(RGB)
  16. EventHandlerData.isImageDetect = False

(2)Tensorflow对截取图片进行物体识别

  1. class objectDetectThread(QThread):
  2. objectSignal = pyqtSignal(str)
  3. def __init__(self):
  4. super.__init__
  5. def run(self):
  6. detection_graph = EventHandlerData.detection_graph
  7. with detection_graph.as_default:
  8. with tf.Session(graph=detection_graph) as sess:
  9. (im_width, im_height) = EventHandlerData.image.size
  10. image_np = np.array(EventHandlerData.image.getdata).reshape((im_height, im_width, 3)).astype(np.uint8)
  11. image_np_expanded = np.expand_dims(image_np, axis=0)
  12. image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
  13. boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
  14. scores = detection_graph.get_tensor_by_name('detection_scores:0')
  15. classes = detection_graph.get_tensor_by_name('detection_classes:0')
  16. num_detections = detection_graph.get_tensor_by_name('num_detections:0')
  17. (boxes, scores, classes, num_detections) = sess.run(
  18. [boxes, scores, classes, num_detections],
  19. feed_dict={image_tensor: image_np_expanded})
  20. objectText = []
  21. # 如果识别概率大于百分之四十,我们就在文本框内显示所识别物体
  22. for i, c in enumerate(classes[0]):
  23. if scores[0][i] > 0.4
  24. object = EventHandlerData.category_index[int(c)]['name']
  25. if object not in objectText:
  26. objectText.append(object)
  27. else:
  28. break
  29. self.objectSignal.emit(', '.join(objectText))
  30. EventHandlerData.detectReady = True
  31. # 本帧图片识别完,isImageDetect 字段置为True,再次开始读取并转换Agora远端实时音视频
  32. EventHandlerData.isImageDetect = True

我们已经将这个Demo 以及Agora Python SDK 上传至Github,大家可以直接下载使用。

Agora Python TensorFlow Demo:

https://github.com/AgoraIO-Community/Agora-Python-Tensorflow-Demo

Agora Python TensorFlow Demo编译指南:

  •  
  • 若是 Windows,复制.pyd and .dll文件到本项目文件夹根目录;若是IOS,复制.so文件到本文件夹根目录
  • 下载TensorFlow 模型,然后把 object_detection 文件复制.到本文件夹根目录
  • 安装 Protobuf,然后运行:protoc object_detection/protos/*.proto --python_out=.
  •  
  • 推荐使用 ssd_mobilenet_v1_coco 和 ssdlite_mobilenet_v2_coco,因为他们相对运行较快
  • 提取 frozen graph,命令行运行:python extractGraph.py --model_file='FILE_NAME_OF_YOUR_MODEL'
  • 最后,在 callBack.py 中修改 model name,在 demo.py 中修改Appid,然后运行即可

请注意,这个 Demo 仅作为演示使用,从获取到远端实时视频画面,到TensorFlow 进行识别处理,再到显示出识别效果,期间需要2至4 秒。不同网络情况、设备性能、算法模型,其识别的效率也不同。感兴趣的开发者可以尝试更换自己的算法模型,来优化识别的延时。

 

 

38
优选产品

关注“Yun88网”

了解最新技术,优质产品服务

关注“全球科技创新”

了解科技企业最新资讯、最新活动

友情链接
Copyright © 2019-2024 Yun88网 Yun88.COM All Rights Reserved 京ICP备19041846号-1