real-time-emotion-detection 排坑记录

real-time-emotion-detection 排坑记录

  • 任务
  • 踩坑回顾
    • CV2包版本问题
      • 症状描述
      • 解决方法
    • 模型文件路径问题
      • 症状描述
      • 解决办法
    • tensorflow版本问题
      • 症状描述
      • 解决办法
  • 其他

任务

我之前跑了一个CNN情绪识别的开源代码,现在我想尝试把他用到我的另一个项目里。但当时那个项目是用python3.8的虚拟环境跑的,我现在的项目的虚拟环境是python3.10,所以就会出点问题。这就是为什么我现在坚持什么项目都用python3.10跑通,并记录排坑博客的原因!方便再次用到。

踩坑回顾

CV2包版本问题

症状描述

我在python3.10环境下,pip3 install一通,直接默认最新的 版本。原本运行没问题的代码,换新环境就找不到元素了:

AttributeError: module 'cv2' has no attribute 'haarcascades'

肯定是包版本问题。要么改版本,要么看新版本是不是同样的功能换了使用方法,如果新版本干脆没这个功能了,就比较棘手,可能得改版本。我不想改版本,就先网上搜下。这篇博客参考回答给了我答案。

解决方法

把源代码中的

face_path = cv2.haarcascades + 'haarcascade_frontalface_alt.xml'

改为

face_path = cv2.data.haarcascades + 'haarcascade_frontalface_alt.xml'

就行了。

模型文件路径问题

症状描述

运行到加载模型这一步报错:

OSError: No file or directory found at ./model/CNN-Emotion-Model

原项目中,脚本和模型的目录在同一个目录中,python也在这个目录下运行,所以是没问题的。但在新项目中,python不在这个目录下运行,所以相对路径的根不再是那个目录,而是python脚本的目录,自然找不到模型文件。这应该是挺常见的问题,但我工程实践太少了,现在才知道怎么处理:

  • 要么用绝对路径:这太傻了,下次项目移植岂不更麻烦
  • 要么保留这一模块的目录结构(也就是保留了相对路径关系),让脚本自己运行时确定自己的绝对路径,一拼接就没问题了:这是个好办法

解决办法

把源代码:

model_path = "./model/CNN-Emotion-Model"

改为:

current_dir = os.path.dirname(os.path.realpath(__file__))
model_path = os.path.join(current_dir, 'model/CNN-Emotion-Model')

就好了。

tensorflow版本问题

症状描述

运行报错很长,可把我吓了一跳。和运行原项目的提示信息一对比,发现主要变化是这几个部分:

2024-02-02 21:58:21.583946: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered
2024-02-02 21:58:21.583973: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered
2024-02-02 21:58:21.584533: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered2024-02-02 21:58:24.336529: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1929] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 6100 MB memory:  -> device: 0, name: NVIDIA GeForce RTX 3070 Laptop GPU, pci bus id: 0000:01:00.0, compute capability: 8.6
2024-02-02 21:58:25.693790: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:447] Loaded runtime CuDNN library: 8.8.1 but source was compiled with: 8.9.4.  CuDNN library needs to have matching major version and equal or higher minor version. If using a binary install, upgrade your CuDNN library.  If building from sources, make sure the library loaded at runtime is compatible with the version specified during compile configuration.
2024-02-02 21:58:25.694223: W tensorflow/core/framework/op_kernel.cc:1839] OP_REQUIRES failed at conv_ops_impl.h:1199 : UNIMPLEMENTED: DNN library is not found.
Traceback (most recent call last):File "/home/lcy-magic/RaceCar_Demo/RaceCar_ShareControl/evaluate/run-realtime.py", line 85, in <module>main()File "/home/lcy-magic/RaceCar_Demo/RaceCar_ShareControl/evaluate/run-realtime.py", line 58, in mainemotion = drawFace(frame, frame_grey)File "/home/lcy-magic/RaceCar_Demo/RaceCar_ShareControl/evaluate/run-realtime.py", line 36, in drawFaceemotion = emotion_model.predict(face/255)File "/home/lcy-magic/anaconda3/envs/CARDEMO/lib/python3.10/site-packages/keras/src/utils/traceback_utils.py", line 70, in error_handlerraise e.with_traceback(filtered_tb) from NoneFile "/home/lcy-magic/anaconda3/envs/CARDEMO/lib/python3.10/site-packages/tensorflow/python/eager/execute.py", line 53, in quick_executetensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.UnimplementedError: Graph execution error:File "/home/lcy-magic/anaconda3/envs/CARDEMO/lib/python3.10/site-packages/keras/src/layers/convolutional/base_conv.py", line 262, in convolution_opDNN library is not found.[[{{node sequential_11/conv2d_57/Conv2D}}]] [Op:__inference_predict_function_1627]

看起来也是版本问题,网上搜了几个方法都不太管用,无奈只好给tensorflow降版本了。

解决办法

通过pip3 list查看原项目的tensorflow版本为tensorflow 2.13.1,而现在项目的版本为tensorflow 2.15.0.post1
于是降版本:

pip3 install tensorflow==2.13.1

再次运行,完美成功:
在这里插入图片描述

其他

我现在很想知道有没有对正负面情绪进行实时打分的算法,特别是基于微表情的,跑的这个情绪识别的开源算法只有做出比较刻意的表情才能被明显识别,较小的情绪变化他捕捉不到,而且波动严重,选取最大值作为主要情绪的识别是合格的,但我想要个能给舒适度打分的算法。如果有知道的大哥,麻烦指个路,多谢多谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/448266.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BioTech - 小分子药物设计与优化 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/135998902 小分子药物设计与优化&#xff0c;是利用计算机辅助技术&#xff0c;根据特定的生物学靶点&#xff0c;发现和改进具有治疗作用的小分子…

深入了解键盘:分类、工作原理与操作指南

键盘 键盘是计算机使用的主要输入设备之一&#xff0c;键盘主要由创建字母、数字和符号并执行附加功能的按钮组成&#xff0c;通常用于向计算机或其他数字设备输入文本、命令和各种控制信号。 键盘是计算机中最重要的字符输入设备&#xff0c;其基本组成元件是按键开关&#…

主机安全加固之-openssh版本升级

升级openssh之前&#xff0c;为了保证能正常通过工具连接主机&#xff0c;咱们开启telnet服务&#xff0c;通过telnet的方式登录主机 一&#xff1a;开启telnet服务 1.安装telnet服务 [rootlocalhost ~]# yum install –y telnet telnet-server xinetd2.修改telnet服务配置文…

24.云原生ArgoCD高级之数据加密seale sealed

云原生专栏大纲 文章目录 数据加密之seale sealedBitnami Sealed Secrets介绍Bitnami Sealed Secrets工作流程安装sealed-secrets和kubeseal安装sealed-secrets-controller安装kubeseal通过kubeseal将sealed-secrets公钥拿出来通过kubeseal加密secrets替换kustomize下secret为…

Java学习day25:守护线程、死锁、线程生命周期(知识点详解)

声明&#xff1a;该专栏本人重新过一遍java知识点时候的笔记汇总&#xff0c;主要是每天的知识点题解&#xff0c;算是让自己巩固复习&#xff0c;也希望能给初学的朋友们一点帮助&#xff0c;大佬们不喜勿喷(抱拳了老铁&#xff01;) 往期回顾 Java学习day24&#xff1a;线程的…

leetcode刷题(剑指offer) 103.二叉树的锯齿形层序遍历

103.二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff1a; 输入&#xff1a…

Android矩阵Matrix裁切setRectToRect拉伸Bitmap替代Bitmap.createScaledBitmap缩放,Kotlin

Android矩阵Matrix裁切setRectToRect拉伸Bitmap替代Bitmap.createScaledBitmap缩放&#xff0c;Kotlin class MyImageView : AppCompatImageView {private var mSrcBmp: Bitmap? nullprivate var testIV: ImageView? nullconstructor(ctx: Context, attrs: AttributeSet) :…

Java对象属性设置方式

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 对象属性设置方式 直接赋值 SystemMappingCode systemMappingCode new SystemMappingCode();systemMappingCode.setCodeResp(request.getCodeResp());systemMapping…

Unity使用反向遮罩实现镂空shader

实现步骤&#xff1a; 1&#xff0c;创建两个材质球&#xff0c;遮罩层的属性如下&#xff1a; 被遮罩层的属性如下&#xff1a; 2&#xff0c;使用两张image&#xff0c;遮罩层在父节点&#xff0c;被遮罩层在子节点&#xff0c;然后分别添加材质球与镂空图片 实现效果如下&a…

Android.bp入门指南之浅析Android.bp文件

文章目录 Android.bp文件是什么&#xff1f;Android.bp的主要作用模块定义依赖关系构建规则模块属性插件支持模块的可配置性 为什么会引入Android.bp语法例子 Android.bp文件是什么&#xff1f; Android.bp 文件是 Android 构建系统&#xff08;Android Build System&#xff…

JS高级(二)-深入对象、内置构造函数、综合案例

文章目录 1.深入对象1.1创建对象的三种方式1.2构造函数1.3实例成员1.4静态成员 2.内置构造函数2.1 Object2.2 Array2.3显示赠品案例2.4包装类型2.4.1 String2.4.2 Number 3.综合案例——购物车展示 1.深入对象 了解面向对象的基础概念&#xff0c;能够利用构造函数创建对象。 1…

踩坑STM32CubeMX生成Makefile工程无法使用printf(“%f“)

过去一年偶有接触STM32开发时都是使用STM32CubeMX生成Makefile的工程&#xff0c;具体开发环境见配置Clion用于STM32开发&#xff08;Makefile&#xff09;&#xff0c;但没想到今天在使用printf打印输出浮点数时无法正常输出&#xff0c;不仅printf无法使用&#xff0c;其他涉…