# mediapie_python **Repository Path**: meizeidexzh/mediapie_python ## Basic Information - **Project Name**: mediapie_python - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-16 - **Last Updated**: 2022-03-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 项目简介 - 星宇台架演示 - 台架组成: - smartlight,通过CAN进行控制 - 智能表面, 通过CAN进行控制 - matrix lamp - jetson NX, 跑检测算法的 - 配合UI界面的使用,可以激活如下的模式 - welcome模式: smartlight 和 智能表面动态效果 - birthday: smartlight 和 智能表面动态效果 - dms: 疲劳检测开启 - 手部跟踪模式: matrix灯进入手部跟踪模式 - 语音交互模式: 通过`你好星宇`关键词来激活,可以识别`打开顶灯`,`关闭顶灯`之类的指令 - all off:所有灯关闭 - 注意: - 本仓库只是涉及dms, voice, ui等功能 - 手部跟踪算法在另外一个仓库,运行见下 #### 运行完整项目 - 需要运行本仓库和手部跟踪2个程序,打开2个终端依次运行 - 运行本仓库 ```bash # first activate the enviroment: $ source mp_env/bin/activate ## 激活环境 # run the app (mp_env) $ python main.py ## 运行main.py ``` - 运行手部跟踪检测算法 ``` $ cd ~/hand_trace ## 切换到手部跟踪算法文件夹 $ ./main.py ## 运行main.py ``` #### 主要模块及实现 - 疲劳驾驶检测: - 相关文件: `dms.py` - 通过google的`mediapipe`开源库来实现的 - 开源的项目只有x86_64的whl文件,需要从源码编译生成whl文件,后面有介绍 - 语音交互模块: - 相关文件: `snowboy_wakeup/` `broadcast.py` - 由河海大学实习生陈万刚完成 - 通过开源库`snowboy`来进行关键词检测 - 关键词唤醒后,进行3秒钟的录音,调用百度云的API将录音上传百度云,进行识别 - UI模块: - 相关文件: `taijia_ui` - 由河海大学实习生徐杰新设计完成 - utils: - 进程间通信主要是通过multiprocessing.Queue来进行的 - CAN通信主要是通过pycan来完成的 - 手部跟踪: - 由星宇研究院王金磊完成 - **代码没有合并到本仓库** - 手部跟踪算法需要另外打开一个终端cd到相应的文件夹运行main.py #### 编译安装CPU版mediapipe python接口 - 适用平台:只在`Jetson Xavier NX`上测试,其他平台应该也可以 - 推荐阅读 ```bash https://google.github.io/mediapipe/ ## mediapipe 官方文档 https://zenn.dev/pinto0309/scraps/71368ef3d74438 ## 一个有关GPU的编译教程,没跑通,但是推荐阅读 https://github.com/PINTO0309/mediapipe-bin.git ## github库 https://github.com/jiuqiant/mediapipe_python_aarch64 ## 一个mediapipe相关的仓库 ``` - 编译安装 ```bash #### Jetson Xavier NX ## 安装依赖库 $ sudo apt upate $ sudo apt install python3-dev python3-pip cmake protobuf-compiler $ pip3 install pip --upgrade ## 升级pip,只有升级完才能通过pip3安装numpy,matplotlib $ pip3 install setuptools --upgrade $ pip3 install -r requirements.txt $ pip3 install dataclasses ## 将mediapipe拉到本地, 进入到mediapipe库 $ git clone https://github.com/google/mediapipe && cd mediapipe ## 修改setup.py ## 将:protoc_command = [self._protoc, '-I.', '--python_out=.', source] ## 改成:protoc_command = [self._protoc, '-I.', '-I/usr/local/include', '--python_out=.', source] ## 将最新的protobuf的头文件放到/usr/local/include ## 从 https://github.com/protocolbuffers/protobuf/releases 下载合适的版本 $ unzip protoc-3.15.6-linux-aarch_64.zip -d protoc3 ## 这里是aarch64版本 $ sudo mv protoc3/bin/* /usr/local/bin/ $ sudo mv protoc3/include/* /usr/local/include/ $ sudo chown user /usr/local/bin/protoc $ sudo chown -R user /usr/local/include/google ## 修改python编译相关设置 $ sed -i -e "/\"imgcodecs\"/d;/\"calib3d\"/d;/\"features2d\"/d;/\"highgui\"/d;/\"video\"/d;/\"videoio\"/d" third_party/BUILD $ sed -i -e "/-ljpeg/d;/-lpng/d;/-ltiff/d;/-lImath/d;/-lIlmImf/d;/-lHalf/d;/-lIex/d;/-lIlmThread/d;/-lrt/d;/-ldc1394/d;/-lavcodec/d;/-lavformat/d;/-lavutil/d;/-lswscale/d;/-lavresample/d" third_party/BUILD $ sed -i -e "/^ # Optimization flags/i \ \"ENABLE_NEON\": \"OFF\"," third_party/BUILD $ sed -i -e "/^ # Optimization flags/i \ \"WITH_TENGINE\": \"OFF\"," third_party/BUILD $ sudo python3 setup.py gen_protos $ sudo python3 setup.py bdist_wheel ``` - 通过`whl`文件 ```bash #### Jetson Xavier NX ## 安装依赖库 $ sudo apt upate $ sudo apt install python3-dev python3-pip cmake protobuf-compiler $ pip3 install pip --upgrade ## 升级pip,只有升级完才能通过pip3安装numpy,matplotlib $ pip3 install setuptools --upgrade $ pip3 install dataclasses $ pip3 install -r requirements.txt $ pip3 install mediapipe-xxxx-linux_aarch64.whl ``` #### 关于Bazel的使用 - `bazel`是谷歌的,类似于`camke` - 清除工程中的目标文件`bazel clean --expunge`