OpenCV+Mediapipe+UDP+Unity挥手电子书翻页

效果视频如下

OpenCV+Mediapipe+UDP+Unity挥手翻页

Python端

其实很简单,基本都是现成的东西。
主要做的事情:

  1. 读取XML配置文件,主要是摄像头的配置(包括分辨率、帧率)、网络配置、调试信息的配置等。
  2. Opencv读取摄像头,Mediapipe识别手,UDP发送识别到的手坐标数据。
  3. PyInstaller将py代码打包为EXE。

    这里有个坑:
    pyinstaller打包的exe,总提示找不到mediapipe路径,需要打包时手工加入mediapipe库:

    pyinstaller --add-data="E:/MyPythonProjects/HandTouch/venv/Lib/site-packages/mediapipe/modules;mediapipe/modules" -w main.py
    

    第二个坑:打包完的Exe路径不能含有中文字符,否则还是提示找不到路径。

关键代码段也就这么些:

cap = cv2.VideoCapture(usbpt)
if width > 0 and height > 0:cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
if vfps > 0:cap.set(cv2.CAP_PROP_FPS, vfps)mpHands = mp.solutions.hands
hands = mpHands.Hands(max_num_hands=1)
mpDraw = mp.solutions.drawing_utilspTime = 0while True:success, img = cap.read()if success:if bFilp:img = cv2.flip(img, 1)imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)h, w, t = img.shaperesult = hands.process(imgRGB)if result.multi_hand_landmarks:lm = result.multi_hand_landmarks[0]hd = lm.landmark[0]x = int(hd.x * w)y = int(hd.y * h)if bShowHand:mpDraw.draw_landmarks(img, lm, mpHands.HAND_CONNECTIONS)cv2.circle(img, (x, y), 3, (0, 255, 255), 3)skt.sendto(('[%d,%d]' % (x, y)).encode('utf-8'), (host, port))if bShowFps:cTime = time.time()fps = int(1 / (cTime - pTime))pTime = cTimecv2.putText(img, str(int(fps)), (20, 60), cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 255), 3)if bShowImg:cv2.imshow("Image", img)if bEscQuit and (cv2.waitKey(1) & 0xff == 27):breakelse:cv2.waitKey(1)cv2.destroyAllWindows()
cap.release()

Unity端

数据收到后,有穷自动状态机,解析一下数据:

// 数据接收线程
private void ReceiveFrom()
{EndPoint remote = new IPEndPoint(IPAddress.Any, 0);byte[] data = new byte[1024];while (IsStart){try{int len = m_socket.ReceiveFrom(data, data.Length, SocketFlags.None, ref remote);for (int i = 0; i < len; ++i){switch (m_state){case ReceState.START:if (data[i] == '['){m_state = ReceState.XDATA;m_pos.x = 0;}break;case ReceState.XDATA:if (data[i] >= '0' && data[i] <= '9')m_pos.x = m_pos.x * 10 + (data[i] - '0');else if (data[i] == ','){m_state = ReceState.YDATA;m_pos.y = 0;}elsem_state = ReceState.START;break;case ReceState.YDATA:if (data[i] >= '0' && data[i] <= '9')m_pos.y = m_pos.y * 10 + (data[i] - '0');else if (data[i] == ']'){thePosition.Enqueue(m_pos);m_state = ReceState.START;}elsem_state = ReceState.START;break;}}}catch { }}
}

对于收到的数据,进一步解析,获得手势:

这里只是用了很简单的判断方式:

  1. 只判断水平方向的挥手
  2. 只看累计位移量(像素)是否达到阈值
private void OnReceivePos(Vector2 pos)
{if( bCanTrigger ){waitTime = 0.333f;if (posCount++ > 0){float delta = pos.x - lastPos;totalDelta += delta;if (posCount > 5 ){if (totalDelta > flipValue){bCanTrigger = false;interval = autoFlip.PageFlipTime;lastPos = 0;totalDelta = 0;posCount = 0;PrevPage();}else if (totalDelta < -flipValue){bCanTrigger = false;interval = autoFlip.PageFlipTime;lastPos = 0;totalDelta = 0;posCount = 0;NextPage();}}}lastPos = pos.x;}
}

OpenCV+Mediapipe+UDP+Unity挥手电子书翻页相关推荐

  1. 6个超炫酷的HTML5电子书翻页动画【转】

    6个超炫酷的HTML5电子书翻页动画 WebGL 演示网址:http://bookcase.chromeexperiments.com 相信大家一定遇到过一些电子书网站,我们可以通过像看书一样翻页来浏 ...

  2. python翻页_python实现电子书翻页小程序

    本文实例为大家分享了python实现电子书翻页的具体代码,供大家参考,具体内容如下 1.题目: 电子书翻页: (1)自动翻页:每次默认读三行,读完之后睡两秒,直到把所有内容全部读出来 (2)手动翻页: ...

  3. unity 制作书本 翻页效果

    unity 制作书籍翻页效果 unity C# 翻书效果 2D 真实翻页 不使用插件 自制 实现思路: 将书本分为两边,一边一个翻页实现: 下图为书本的右面,以OA为分界线,△OAB是下一面的如上图的 ...

  4. css 右上角 翻开动画_6个超炫酷的HTML5电子书翻页动画

    相信大家一定遇到过一些电子书网站,我们可以通过像看书一样翻页来浏览电子书的内容.今天我们要分享的HTML5应用跟电子书翻页有关,我们精选出来的6个电子书翻页动画都非常炫酷,而且都提供源码下载,有需要的 ...

  5. HTML5电子书翻页效果 代码特效+鼠标点击拖拽滑动翻页+点击书页内容放大+不支持中文

    介绍 源码名称:[HTML5电子书翻页效果]代码特效+鼠标点击拖拽滑动翻页+点击书页内容放大+不支持中文 源码大小:237KB 开发语言:PHP+Mysql 操作系统:Windows,Linux 源码 ...

  6. Android电子书翻页效果实现

    http://blog.csdn.net/johnsonblog/article/details/7974312 效果 其中使用了贝赛尔曲线原理,关于贝赛尔曲线的知识,推荐大家看下http://blo ...

  7. 获得一个不错的电子书翻页效果,和大家分享

    前些天在网上搜到一个不错的电子书的翻页效果的源码,也做了个Dome,感觉很好玩,这里来和大家一起分享下. 效果已经被写成了一个ViewController,我们只要让自己的显示界面继承这个ViewCo ...

  8. javascript移动端 电子书 翻页效果

    1.后端给一长串的纯文本 2.前端根据屏幕的高度,将文本切割为 n 页 3.使用插件 turn.js 将切割好的每页,加上翻书效果 <!DOCTYPE html> <html lan ...

  9. Next FlipBook Maker Pro(h5电子书翻页效果制作软件)官方正式版V2.7.20 | h5翻页杂志制作软件下载

    ​            Next FlipBook Maker Pro 是一款优秀实用且酷炫逼真的交互式H5翻页电子杂志制作软件,为广大用户提供了一种将静态PDF文档或图片转换为带有H5翻页效果的数 ...

最新文章

  1. 菜单样式1:鼠标悬停向下弹出列表
  2. java jar 和 war 包的区别
  3. 字体设置_word字体设置:如何为常用字体设置快捷键
  4. Python之并发编程
  5. 【网络安全】手把手给大家演练红队渗透项目
  6. 揭开腾讯IDC节能环保黑科技
  7. FPGA跨时钟域处理方法FIFO
  8. .Net更改代码生成不生效
  9. 基础数据类型转换过程中注意事项
  10. 阿尔法贝塔剪枝——中国象棋人机对战
  11. AutoUpdater 实现一个简易的自动升级工具
  12. 【PHP】最详细PHP从入门到精通(一)
  13. java 校验银行卡号_Java之——基于Luhn算法的银行卡卡号的格式校验
  14. eclipse将安卓项目commit至github本地仓库后,项目bin文件夹下不生成apk且运行报错
  15. 非科班出身程序员该如何弥补技术差距?
  16. Oracle Database 10g for Windows2003安装
  17. Python 进程、线程、协程傻傻分不清楚?详细总结(附代码)
  18. GNS与WireShark安装流程
  19. android新闻客户端(有源码)
  20. Centos7安装php7.4

热门文章

  1. css 行与行之间有间隙
  2. 统一门户平台对企业的重要性
  3. 红帽认证学习笔记-破解密码
  4. CocosCreator | 微信小游戏排行榜 微信开放域
  5. Ada语言-标识符和注释
  6. 如何做好学术演讲-02
  7. 如何利用超级电容设计简单的不间断电源
  8. 企业如何做好员工安全意识提升
  9. 云场景实践研究第59期:饿了么
  10. 数据传送类指令LAD的数据传送方向是( )。 A 从寄存器到内存 B 从寄存器到寄存器 C 从内存到内存 D 从内存到寄存器...