PC端Opencv手部关节校验与HMS Core ML Kit 机器学习套件尝试(Android端)
文章目录
- 一、 效果(版本2的效果)
- 二、全部源码
- 版本1:未封装代码
- 版本2:封装好的代码
- 三、 开发工具
- 四、 遇到的问题记录
- 1. error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’
- 2. 使用pip指令,下载opencv-python,numpy等报错
- 3.`anonymous-namespace'::SourceReaderCB::~SourceReaderCB terminating async callback
- 五、附录:关于Android中使用机器学习套件
Opencv 官网下载链接: https://opencv.org/releases/
一、 效果(版本2的效果)
手部模型不需要自己再去训练,Opencv封装好了训练模型。
封装好的文件模型如下(记得当时是找了很久才找到在哪里,所以当时找到了专门建了一个文件夹):
我自己的Opencv是4.x版本的,这些xml文件具体在:
D:\Opencv\opencv\sources\data\haarcascades_cuda
可以使用文件搜索:
如果找不到下面有链接。
百度网盘连接提取码:2apc
下面是我的关于Opencv的手势识别代码模型。
二、全部源码
版本1:未封装代码
这个代码可以复制后直接运行,看出效果的。
#!/usr/bin/python3.7
# coding=utf-8
import cv2
import mediapipe as mp
import time
# 导入opencv模块
# 捕捉帧,笔记本摄像头设置为0即可
""" VideoCapture第一个参数就是摄像头编号"""
capture =cv2.VideoCapture(0,cv2.CAP_DSHOW)
# 初始化(模型使用之前)
mpHands =mp.solutions.hands
hands=mpHands.Hands()
mpDraw=mp.solutions.drawing_utils
pTime=0
cTime=0
# 循环显示帧
while True :success, img = capture.read()imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)results=hands.process(imgRGB)"""在显示图片之前,我们需要对图像进行一些处理"""# 下面这个函数,当手放入摄像头范围内,就会返回相应的Landmark值,否则返回的是None#print(results.multi_hand_landmarks)# 输出手的每个坐标(一只手几十个点)if results.multi_hand_landmarks:print("读取成功!")for handLms in results.multi_hand_landmarks:for id, lm in enumerate(handLms.landmark):print(id,lm)mpDraw.draw_landmarks(img, handLms,mpHands.HAND_CONNECTIONS) # 第三个参数的意思是,让手中的节点连接。cv2.imshow('Carmer', img)if cv2.waitKey(1) == ord('q'): # 按Q退出break
版本2:封装好的代码
这个代码是封装好的,都后面如果需要就是直接引用。不过也可以直接运行这个程序,也同样能出结果。
import cv2
import mediapipe as mp
import timeclass handDetector():def __init__(self, mode=False, maxHands=2, detectionCon=0.5, trackCon=0.5):self.mode = modeself.maxHands = maxHandsself.detectionCon = detectionConself.trackCon = trackConself.mpHands = mp.solutions.handsself.hands = self.mpHands.Hands(self.mode, self.maxHands,self.detectionCon, self.trackCon)self.mpDraw = mp.solutions.drawing_utilsdef findHands(self, img, draw=True):imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)self.results = self.hands.process(imgRGB)# print(results.multi_hand_landmarks)if self.results.multi_hand_landmarks:for handLms in self.results.multi_hand_landmarks:if draw:self.mpDraw.draw_landmarks(img, handLms,self.mpHands.HAND_CONNECTIONS)return imgdef findPosition(self, img, handNo=0, draw=True):lmList = []if self.results.multi_hand_landmarks:myHand = self.results.multi_hand_landmarks[handNo]for id, lm in enumerate(myHand.landmark):# print(id, lm)h, w, c = img.shapecx, cy = int(lm.x * w), int(lm.y * h)# print(id, cx, cy)lmList.append([id, cx, cy])# if draw: 这部分代码画出了手上所有结点,因为比较难看,就注释掉了。# cv2.circle(img, (cx, cy), 15, (255, 0, 255), cv2.FILLED)return lmListdef main():pTime = 0cTime = 0cap = cv2.VideoCapture(0)detector = handDetector()while True:success, img = cap.read()img = detector.findHands(img)lmList = detector.findPosition(img)if len(lmList) != 0:print(lmList[4])cTime = time.time()fps = 1 / (cTime - pTime)pTime = cTimecv2.putText(img, str(int(fps)), (10, 70), cv2.FONT_HERSHEY_PLAIN, 3,(255, 0, 255), 3)cv2.imshow("Image", img)cv2.waitKey(1)if __name__ == "__main__":main()
同时打印出了手上的每个结点的位置变化。
三、 开发工具
Pycharm2021,Python3.7 .
四、 遇到的问题记录
1. error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’
报错:
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-_xlv4eex\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’
这个问题,网上的一些解释是,如果你导入的是一个静态图片,那么要么是你的斜杠写错,
或者是你的路径中有中文,不妨换个没有中文的路径,或者修改图片为英文试试。
但是我这里是摄像头
解决方案:修改摄像头参数
cap = cv2.VideoCapture(1) #这个是B站源码中的摄像头编号
可能是获取摄像头参数出错,修改摄像头编号为0。运行即可。
cap = cv2.VideoCapture(0)
2. 使用pip指令,下载opencv-python,numpy等报错
在控制台上使用pip指令下载是,经常碰到超时问题,本身文件不大,但是你的下载速度只有12kb/s甚至只有几kb每秒
遇到的问题例如下面这个:
其实这个问题就是因为你的下载速度太慢导致的。
解决方案:使用国内镜像安装
这时候,考虑使用国内镜像安装,会快很多。.点击进入国内镜像安装教程
一般numpy,opencv-python都有国内镜像。不过我安装mediatepipe时,并没有找到国内镜像,但是控制台cmd使用下面这个指令太慢了。也是只有几kb/s
pip install mediapipe
所以我选择了去PyCharm去下载:
方式:
File—>Setting—>Project:python-project-Python Interpreter(Python解释器)
点击“+”,添加解释器,然后在搜索框中搜索你需要的package即可。opencv-python,numpy,mediapipe都可以直接搜到。
点击下面的Install Package即可。
3.`anonymous-namespace’::SourceReaderCB::~SourceReaderCB terminating async callback
ValueError: could not broadcast input array from shape (656,396,3) into shape (200,200,3)
[ WARN:1] global C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-_xlv4eex\opencv\modules\videoio\src\cap_msmf.cpp (438) `anonymous-namespace’::SourceReaderCB::~SourceReaderCB terminating async callback
原代码:
cap =cv2.VideoCapture(0)
修改成下面的:
cap =cv2.VideoCapture(0,cv2.CAP_DSHOW)
五、附录:关于Android中使用机器学习套件
现在做的项目需要把OpenCV部署到 Android 端,其实Opencv有专门为Android设计的函数库,但是上手慢,安装比较复杂。这里推荐用华为HMS Core 中的 机器学习服务
HMS Core是华为终端云服务(HUAWEI Mobile Services)开放能力合集,位于开发者应用与操作系统之间,是为应用开发提供基础服务的平台。同时,依托华为云服务,HMS Core也为这些服务提供云端能力,用于各服务的开通、业务实现及运营,如下图所示。
具体HMS Core 服务信息点击这个链接 :HMS Core 服务官方文档
对于新手来说,上手很方便,在我的项目里面主要用于康复训练姿势识别。这里给出几个项目的运行截图
从开发者来讲,HMS Core ML Kit使用起来十分方便,其中还有很多姿势识别,这里只是列举了手势识别的效果。这款APP全部由我一人开发完成,时间原因只能做一些简单的姿势。
HMS Core ML Kit 机器学习套件 相关网址:
2.Gitee HMS 终端服务仓库
3.Gitee 官方机器学习套件代码
想直接看机器学习的点击第三个链接就是源代码部分。
先根据官方文档注册成为开发者,后续使用直接下载Gitee ZIP文件,然后将下载下来的压缩包解压成文件夹,直接解压放到桌面上也行,然后用Android Studio 直接打开本地文件直接运行就可以使用了。
注意:HMS Core中的姿态识别需要在真机调试。
由于本人使用的就是华为手机(鸿蒙操作系统),所以把项目运行在我的手机上时可以直接用,但是别的牌子手机可能就需要安装 HMS Core 终端服务了。.
PC端Opencv手部关节校验与HMS Core ML Kit 机器学习套件尝试(Android端)相关推荐
- 超简单集成HMS Core ML Kit场景识别,构建相册管理新模式
前言 "给你看下我之前去景区玩拍的照片,风景很好" "嗯嗯,我正好也准备出去玩,快分享下" -- "照片呢,还没找到吗?" "等会 ...
- 一卷河图赋太虚:HMS Core CG kit与移动游戏新可能
中国文化中,根深蒂固蕴藏着幻想的文化基因.从<列子>中周穆王"神游幻境",到<红楼梦>里贾宝玉"梦入太虚",太虚幻境可以说是一个流传千年 ...
- HMS Core Discovery第16期回顾|与虎墩一起,玩转AI新“声”态
HMS Core 在AI领域最新的技术能力有哪些?本期Discovery直播以<与虎墩一起,玩转AI新"声"态>为主题,邀请了HMS Core 机器学习服务产品经理.机 ...
- android端使用openCV与深度学习实现车牌识别
车牌识别的应用场景随处可见:高速公路上超速抓拍.小区门口关卡.车库入口关卡,甚至出现在车载设备上.它的工作原理大致这样:使用摄像头充当"眼睛",使用openCV与深度学习充当&qu ...
- HMS Core使能AI智慧体验,共建创新应用生态
5月17日,2022年搜狐科技峰会成功举办,峰会汇聚各界大咖,共同探讨AI 技术的深入应用以及行业数字化的发展趋势.华为终端云服务应用生态BU总裁望岳发表题为<使能AI智慧体验,共建创新应用生态 ...
- HMS Core Insights第二期直播预告——华为定位技术让你重拾方向感
[导读] 从古至今,人们从未停止对精确定位的追求.古人夜观星象定位,发明思南指引方向,用六分仪在大海上乘风破浪.而随着科技的发展,现代的人们已经可以通过手机享受便捷准确的定位服务.无论是出行导航,网购 ...
- Android端与服务端基于TCP/IP协议的Socket通讯
什么是TCP/IP协议? 百度百科的解释:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议, ...
- 修图神器—超简单实现华为HMS ML Kit图像超分辨率
前言 不知道大家有没有遇到这样的情况,图片压缩接收下载后清晰度骤降,画质模糊,更不用说放大浏览了.最近小编就遇到了啊,收到朋友发送的旅游合照压缩包,打开后,OMG,这昏暗的场景.黑黑的人像.模糊的画面 ...
- 攀岩时代:HMS Core 6.0与移动开发之路
今年的东京奥运会中,一些全新运动项目首次进入奥运是一大看点.其中就包括科技界经常用以比喻自己的:攀岩. 刚刚加入奥运大家庭的攀岩运动,需要选手在陡峭的崖壁,甚至负角度情况下,在仅有的几个发力点支撑下向 ...
最新文章
- 计算机系未来的理想工作,电智学院2019级计算机专业开展专业指导与职业规划报告会...
- python添加excel模块_python操作Excel模块openpyxl
- [持续更新]UnsatisfiedLinkError常见问题及解决方案
- Visual Studio各版本工程文件之间的转换 [转载]
- 语音情感识别----语音特征集之eGeMAPS,ComParE,09IS,BoAW
- Centos7入侵分析:分析SSH登录日志
- FZU 2150 Fire Game bfs
- 非规范SQL的sharding-jdbc实践
- 软件测试人员:如何优秀的提Bug?
- Linux 下如何查找 MySQL 数据库的数据根目录呢?
- linux打包java jar_在linux环境下修改可运行jar包配置并重新打包
- 3gpp协议_C-V2X: 3GPP协议阅读前的一些准备
- Java编写优雅接口,看看别人后端API接口写得,那叫一个优雅!
- oracle 由32位迁移到64位的问题
- 关于Java锁机制面试官会怎么问,深刻易懂
- 《东周列国志》第六十七回 卢蒲癸计逐庆封 楚灵王大合诸侯
- Kvaser怎么使用虚拟驱动?Kvaser Leaf Light HS v2
- ARINC615-3 与 ARINC844 PART2 协议解析 思维导图
- Apache安装教程
- 电商“论贱”血拼 传统书店该何去何从