[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-asingh33--CNNGestureRecognizer":3,"tool-asingh33--CNNGestureRecognizer":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",158594,2,"2026-04-16T23:34:05",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":78,"owner_twitter":79,"owner_website":80,"owner_url":81,"languages":82,"stars":87,"forks":88,"last_commit_at":89,"license":90,"difficulty_score":91,"env_os":92,"env_gpu":93,"env_ram":94,"env_deps":95,"category_tags":103,"github_topics":104,"view_count":32,"oss_zip_url":79,"oss_zip_packed_at":79,"status":17,"created_at":111,"updated_at":112,"faqs":113,"releases":142},8205,"asingh33\u002FCNNGestureRecognizer","CNNGestureRecognizer","Gesture recognition via CNN. Implemented in Keras + Tensorflow\u002FTheano + OpenCV","CNNGestureRecognizer 是一款基于卷积神经网络（CNN）的手势识别开源项目，旨在让计算机通过摄像头实时“看懂”用户的手势。它主要解决了传统图像处理方法在复杂背景下识别率低、延迟高的问题，能够准确识别\"OK\"、“和平”、“停止”、“出拳”以及“无手势”五种状态。\n\n该项目特别适合开发者、人工智能研究人员以及计算机视觉爱好者使用。对于希望快速搭建手势交互原型或深入学习 CNN 在图像分类中应用的团队，它提供了一个完整的参考范例。普通用户若想体验基础的 AI 手势控制，也可在配置好环境后直接运行。\n\n技术亮点方面，CNNGestureRecognizer 支持 Keras 框架下的 TensorFlow 后端（已替代过时的 Theano），并引入了高效的背景减除滤波器，显著提升了识别精度。其优化后的架构实现了预测模式下的零帧率下降，确保流畅的实时体验。此外，工具内置了概率图表可视化功能，方便用户直观观察模型对每种手势的判断置信度。项目提供了预训练权重文件及详细的训练脚本，用户不仅可以立即使用，还能利用自有数据重新训练模型，灵活扩展新的手势类别。","\nHey there reader,\n\nIf you find my work useful and you have implemented something based on this project, then please do share about your project on my email. This will motivate me. \nThanks !\n\n\n\n\n[![DOI](https:\u002F\u002Fzenodo.org\u002Fbadge\u002F89872749.svg)](https:\u002F\u002Fzenodo.org\u002Fbadge\u002Flatestdoi\u002F89872749)\n# CNNGestureRecognizer\nGesture recognition via CNN neural network implemented in Keras + Theano + OpenCV\n\n\nKey Requirements:\nPython 3.6.1\nOpenCV 3.4.1\nKeras 2.0.2\nTensorflow 1.2.1\nTheano 0.9.0   (obsolete and not supported any further)\n\nSuggestion: Better to download Anaconda as it will take care of most of the other packages and easier to setup a virtual workspace to work with multiple versions of key packages like python, opencv etc.\n\n# New changes\nI have uploaded few more changes to this repo -\n- Project is Python3 compatible now.\n- Added TensorFlow support, as Theano's development has been stopped.\n- Added a new background subtraction filter, which is by far the best performing filter for this project\n- Added lots of performance improving changes. There is now literally no FPS drop when prediction mode is enabled\n- An in-app graph plotting has been added to observe the probability of the gesture predictions \n \n# Repo contents\n- **trackgesture.py** : The main script launcher. This file contains all the code for UI options and OpenCV code to capture camera contents. This script internally calls interfaces to gestureCNN.py.\n- **gestureCNN.py** : This script file holds all the CNN specific code to create CNN model, load the weight file (if model is pretrained), train the model using image samples present in **.\u002Fimgfolder_b**, visualize the feature maps at different layers of NN (of pretrained model) for a given input image present in **.\u002Fimgs** folder.\n- **imgfolder_b** : This folder contains all the 4015 gesture images I took in order to train the model.\n```diff\n- Note: I have replaced ori_4015imgs_weights.hdf5 weight file with these two OS specific weight files. \n```\n- **_pretrained_weights_MacOS.hdf5_** : This is pretrained weight file on MacOS. Due to its large size (150 MB), its hosted seperately on my google driver link - https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1j7K96Dkatz6q6zr5RsQv-t68B3ZOSfh0\u002Fview\n- **_pretrained_weights_WinOS.hdf5_** : This is pretrained weight file on Windows. Due to its large size (150 MB), its hosted seperately on my google driver link - https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1PA7rJxHYQsW5IvcZAGeoZ-ExYSttFuGs\u002Fview\n- **_imgs_** - This is an optional folder of few sample images that one can use to visualize the feature maps at different layers. These are few sample images from imgfolder_b only.\n- **_ori_4015imgs_acc.png_** : This is just a pic of a plot depicting model accuracy Vs validation data accuracy after I trained it.\n- **_ori_4015imgs_loss.png_** : This is just a pic of a plot depicting model loss Vs validation loss after I training.\n\n# Usage\n**On Mac**\n```bash\neg: With Theano as backend\n$ KERAS_BACKEND=tensorflow python trackgesture.py \n```\n**On Windows**\n```bash\neg: With Tensorflow as backend\n> set \"KERAS_BACKEND=tensorflow\"\n> python trackgesture.py \n```\n\nWe are setting KERAS_BACKEND to change backend to Theano, so in case you have already done it via Keras.json then no need to do that. But if you have Tensorflow set as default then this will be required.\n\n# Features\nThis application comes with CNN model to recognize upto 5 pretrained gestures:\n- OK\n- PEACE\n- STOP\n- PUNCH\n- NOTHING (ie when none of the above gestures are input)\n\nThis application provides following functionalities:\n- Prediction : Which allows the app to guess the user's gesture against pretrained gestures. App can dump the prediction data to the console terminal or to a json file directly which can be used to plot real time prediction bar chart (you can use my other script - https:\u002F\u002Fgithub.com\u002Fasingh33\u002FLivePlot)\n- New Training : Which allows the user to retrain the NN model. User can change the model architecture or add\u002Fremove new gestures. This app has inbuilt options to allow the user to create new image samples of user defined gestures if required.\n- Visualization : Which allows the user to see feature maps of different NN layers for a given input gesture image. Interesting to see how NN works and learns things.\n\n\n# Demo \nYoutube link - https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=CMs5cn65YK8\n\n![](https:\u002F\u002Fj.gifs.com\u002FX6zwYm.gif)\n\n# Gesture Input\nI am using OpenCV for capturing the user's hand gestures. In order to simply things I am doing post processing on the captured images to highlight the contours & edges. Like applying binary threshold, blurring, gray scaling.\n\nI have provided two modes of capturing:\n- Binary Mode : In here I first convert the image to grayscale, then apply a gaussian blur effect with adaptive threshold filter. This mode is useful when you have an empty background like a wall, whiteboard etc.\n- SkinMask Mode : In this mode, I first convert the input image to HSV and put range on the H,S,V values based on skin color range. Then apply errosion followed by dilation. Then gaussian blur to smoothen out the noises. Using this output as a mask on original input to mask out everything other than skin colored things. Finally I have grayscaled it. This mode is useful when there is good amount of light and you dont have empty background.\n\n**Binary Mode processing**\n```python\ngray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)\nblur = cv2.GaussianBlur(gray,(5,5),2)   \nth3 = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,11,2)\nret, res = cv2.threshold(th3, minValue, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)\n```\n\n![OK gesture in Binary mode](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_readme_ce6d0bfb083e.png)\n\n\n**SkindMask Mode processing**\n```python\nhsv = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)\n    \n#Apply skin color range\nmask = cv2.inRange(hsv, low_range, upper_range)\n\nmask = cv2.erode(mask, skinkernel, iterations = 1)\nmask = cv2.dilate(mask, skinkernel, iterations = 1)\n\n#blur\nmask = cv2.GaussianBlur(mask, (15,15), 1)\n#cv2.imshow(\"Blur\", mask)\n\n#bitwise and mask original frame\nres = cv2.bitwise_and(roi, roi, mask = mask)\n# color to grayscale\nres = cv2.cvtColor(res, cv2.COLOR_BGR2GRAY)\n```\n![OK gesture in SkinMask mode](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_readme_4b1ff8369a52.png)\n\n\n# CNN Model used\nThe CNN I have used for this project is pretty common CNN model which can be found across various tutorials on CNN. Mostly I have seen it being used for Digit\u002FNumber classfication based on MNIST database.\n\n```python\nmodel = Sequential()\nmodel.add(Conv2D(nb_filters, (nb_conv, nb_conv),\n                    padding='valid',\n                    input_shape=(img_channels, img_rows, img_cols)))\nconvout1 = Activation('relu')\nmodel.add(convout1)\nmodel.add(Conv2D(nb_filters, (nb_conv, nb_conv)))\nconvout2 = Activation('relu')\nmodel.add(convout2)\nmodel.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))\nmodel.add(Dropout(0.5))\n\nmodel.add(Flatten())\nmodel.add(Dense(128))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(nb_classes))\nmodel.add(Activation('softmax'))\n```\n\nThis model has following 12 layers -\n```\n_________________________________________________________________\nLayer (type)                 Output Shape              Param #   \n=================================================================\nconv2d_1 (Conv2D)            (None, 32, 198, 198)      320       \n_________________________________________________________________\nactivation_1 (Activation)    (None, 32, 198, 198)      0         \n_________________________________________________________________\nconv2d_2 (Conv2D)            (None, 32, 196, 196)      9248      \n_________________________________________________________________\nactivation_2 (Activation)    (None, 32, 196, 196)      0         \n_________________________________________________________________\nmax_pooling2d_1 (MaxPooling2 (None, 32, 98, 98)        0         \n_________________________________________________________________\ndropout_1 (Dropout)          (None, 32, 98, 98)        0         \n_________________________________________________________________\nflatten_1 (Flatten)          (None, 307328)            0         \n_________________________________________________________________\ndense_1 (Dense)              (None, 128)               39338112  \n_________________________________________________________________\nactivation_3 (Activation)    (None, 128)               0         \n_________________________________________________________________\ndropout_2 (Dropout)          (None, 128)               0         \n_________________________________________________________________\ndense_2 (Dense)              (None, 5)                 645       \n_________________________________________________________________\nactivation_4 (Activation)    (None, 5)                 0         \n=================================================================\n```\nTotal params: 39,348,325.0\nTrainable params: 39,348,325.0\n\n# Training\nIn version 1.0 of this project I had used 1204 images only for training. Predictions probability was ok but not satisfying. So in version 2.0 I increased the training image set to 4015 images i.e. 803 image samples per class. Also added an additional class 'Nothing' along with the previous 4 gesture classes.\n\nI have trained the model for 15 epochs.\n\n![Training Accuracy Vs Validation Accuracy](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_readme_be3f04105f5c.png)\n\n![Training Loss Vs Validation Loss](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_readme_4d5aec385d2e.png)\n\n\n# Visualization\nCNN is good in detecting edges and thats why its useful for image classificaion kind of problems. In order to understand how the neural net is understanding the different gesture input its possible to visualize the layer feature map contents.\n\nAfter launching the main script choose option 3 for visualizing different or all layer for a given image (currently it takes images from .\u002Fimgs, so change it accordingly)\n```\nWhat would you like to do ?\n    1- Use pretrained model for gesture recognition & layer visualization\n    2- Train the model (you will require image samples for training under .\\imgfolder)\n    3- Visualize feature maps of different layers of trained model\n    3\nWill load default weight file\nImage number 7\nEnter which layer to visualize -1\n(4015, 40000)\nPress any key\nsamples_per_class -  803\nTotal layers - 12\nDumping filter data of layer1 - Activation\nDumping filter data of layer2 - Conv2D\nDumping filter data of layer3 - Activation\nDumping filter data of layer4 - MaxPooling2D\nDumping filter data of layer5 - Dropout\nCan't dump data of this layer6- Flatten\nCan't dump data of this layer7- Dense\nCan't dump data of this layer8- Activation\nCan't dump data of this layer9- Dropout\nCan't dump data of this layer10- Dense\nCan't dump data of this layer11- Activation\nPress any key to continue\n```\n\nTo understand how its done in Keras, check visualizeLayer() in gestureCNN.py\n```python\nlayer = model.layers[layerIndex]\n\nget_activations = K.function([model.layers[0].input, K.learning_phase()], [layer.output,])\nactivations = get_activations([input_image, 0])[0]\noutput_image = activations\n```\nLayer 4 visualization for PUNCH gesture\n![Layer 4 visualization for PUNCH gesture](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_readme_2ad11264e9b2.png)\n\nLayer 2 visualization for STOP gesture\n![Layer 2 visualization for STOP gesture](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_readme_47a4bef5f242.png)\n\n\n\n# Conclusion\nSo where to go from here? Well I thought of testing out the responsiveness of NN predictions and games are good benchmark. On MAC I dont have any games installed but then this Chrome Browser Dino Jump game came handy. So I bound the 'Punch' gesture with jump action of the Dino character. Basically can work with any other gesture but felt Punch gesture is easy. Stop gesture was another candidate.\n\nWell here is how it turned out :)\n\nWatch full video - https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=lnFPvtCSsLA&t=49s\n\n![](https:\u002F\u002Fj.gifs.com\u002F58pxVx.gif)\n\n\n\n# In case you want to cite my work\nAbhishek Singh,”asingh33\u002FCNNGestureRecognizer: CNNGestureRecognizer (Version 1.3.0)”, Zenodo. http:\u002F\u002Fdoi.org\u002F10.5281\u002Fzenodo.1064825, Nov. 2017.  \nDo tell me how you used this work in your project. Would love to see your work. Good Luck!\n\n\n\nDont forget to check out my other github project where I used this framework and applied SuperVised machine learning technique to train the Chrome Browser's TRex character :)\nhttps:\u002F\u002Ftechkblog.com\u002Fteach-an-ai-to-play-game-using-supervised-learning\u002F\nYoutube link - https:\u002F\u002Fyoutu.be\u002FZZgvklkQrss\n\n![](https:\u002F\u002Fj.gifs.com\u002FDRg4mn.gif)\n\n","嗨，讀者朋友：\n\n如果你覺得我的作品很有用，並且已經基於這個項目實現了自己的應用，那麼請務必通過電子郵件與我分享你的項目情況。這將會給我很大的動力！  \n謝謝！\n\n[![DOI](https:\u002F\u002Fzenodo.org\u002Fbadge\u002F89872749.svg)](https:\u002F\u002Fzenodo.org\u002Fbadge\u002Flatestdoi\u002F89872749)\n# CNNGestureRecognizer\n使用 Keras + Theano + OpenCV 實現的基於 CNN 神經網絡的手勢識別\n\n主要依賴：\nPython 3.6.1  \nOpenCV 3.4.1  \nKeras 2.0.2  \nTensorFlow 1.2.1  \nTheano 0.9.0（已過時且不再維護）\n\n建議：最好下載 Anaconda，它能自動處理大多數依賴包，並方便搭建虛擬環境來管理不同版本的關鍵庫，如 Python、OpenCV 等。\n\n# 新變化\n我在這個倉庫中新增了幾項改動：\n- 現在完全兼容 Python 3。\n- 增加了對 TensorFlow 的支持，因為 Theano 已停止開發。\n- 新增了一種背景減除濾波器，這是目前為止針對本項目效果最好的濾波器。\n- 許多性能優化改動，現在即使啟用預測模式，也幾乎不會出現 FPS 下降。\n- 添加了應用內圖形繪製功能，可用於觀察手勢預測的概率分佈。\n\n# 項目內容\n- **trackgesture.py**：主程序入口。該文件包含了所有 UI 選項以及用於捕獲攝像頭畫面的 OpenCV 程序碼。此腳本會內部調用 gestureCNN.py 中的接口。\n- **gestureCNN.py**：該文件包含所有與 CNN 相關的代碼，用於創建 CNN 模型、加載權重文件（若模型已預訓練）、使用 **.\u002Fimgfolder_b** 中的圖像樣本訓練模型，以及可視化預訓練模型在不同層次上的特徵圖（針對 **.\u002Fimgs** 文件夾中的輸入圖像）。\n- **imgfolder_b**：此文件夾包含我用來訓練模型的 4015 張手勢圖像。\n```diff\n- 注意：我已將 ori_4015imgs_weights.hdf5 權重文件替換為這兩份針對不同操作系統的權重文件。\n```\n- **_pretrained_weights_MacOS.hdf5_**：這是適用於 macOS 的預訓練權重文件。由於其體積較大（150 MB），我將其單獨存放在 Google Drive 鏈接中：https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1j7K96Dkatz6q6zr5RsQv-t68B3ZOSfh0\u002Fview\n- **_pretrained_weights_WinOS.hdf5_**：這是適用於 Windows 的預訓練權重文件。同樣由於其體積較大（150 MB），我也將其單獨存放在 Google Drive 鏈接中：https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1PA7rJxHYQsW5IvcZAGeoZ-ExYSttFuGs\u002Fview\n- **_imgs_**：這是一個可選文件夾，包含一些示例圖像，用戶可以用它來可視化不同層次的特徵圖。這些圖像均來自 imgfolder_b。\n- **_ori_4015imgs_acc.png_**：這是一張圖表，顯示了模型訓練後的準確率與驗證數據準確率的對比。\n- **_ori_4015imgs_loss.png_**：這是一張圖表，顯示了模型訓練後的損失與驗證損失的對比。\n\n# 使用方法\n**在 Mac 上**\n```bash\n例如：以 Theano 為後端\n$ KERAS_BACKEND=tensorflow python trackgesture.py \n```\n**在 Windows 上**\n```bash\n例如：以 TensorFlow 為後端\n> set \"KERAS_BACKEND=tensorflow\"\n> python trackgesture.py \n```\n\n我們設置 KERAS_BACKEND 是為了切換後端到 Theano；如果你已經通過 Keras.json 進行了設定，則無需再次操作。但如果你的默認後端是 TensorFlow，那麼就需要這樣設置。\n\n# 功能特點\n本應用配備一個 CNN 模型，可識別最多 5 種預訓練手勢：\n- OK\n- 和平手勢\n- 停止手勢\n- 拳頭\n- 無動作（即當沒有上述任何手勢時）\n\n該應用提供以下功能：\n- 預測：允許應用根據預訓練的手勢來判斷用戶的手勢。預測結果可以輸出到控制台或直接保存為 JSON 文件，以便進一步繪製實時預測柱狀圖（可使用我的另一個腳本：https:\u002F\u002Fgithub.com\u002Fasingh33\u002FLivePlot）。\n- 新訓練：允許用戶重新訓練神經網絡模型。用戶可以更改模型架構或添加\u002F刪除新的手勢。應用內還提供了創建自定義手勢圖像樣本的功能。\n- 可視化：允許用戶查看特定輸入手勢圖像在不同神經網絡層次上的特徵圖。這有助於理解神經網絡的工作原理及其學習過程。\n\n# 示範影片\nYouTube 鏈接：https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=CMs5cn65YK8\n\n![](https:\u002F\u002Fj.gifs.com\u002FX6zwYm.gif)\n\n# 手勢輸入\n我使用 OpenCV 來捕捉用戶的手勢。為了簡化流程，我對捕獲到的圖像進行後期處理，強調輪廓和邊緣，例如應用二值閾值、模糊處理和灰度轉換。\n\n我提供了兩種捕獲模式：\n- 二值模式：首先將圖像轉換為灰度，然後應用高斯模糊和自適應閾值濾波器。這種模式適用於背景簡單的情況，例如牆壁或白板等。\n- 皮膚掩膜模式：在此模式下，先將輸入圖像轉換為 HSV 格式，並根據皮膚顏色範圍設置 H、S、V 的閾值。接著進行腐蝕和膨脹操作，再用高斯模糊去除雜訊。最後將處理結果作為掩膜疊加到原始圖像上，只保留皮膚顏色的部分，然後再轉為灰度。這種模式適用於光照充足且背景複雜的情況。\n\n**二值模式處理**\n```python\ngray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)\nblur = cv2.GaussianBlur(gray,(5,5),2)   \nth3 = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,11,2)\nret, res = cv2.threshold(th3, minValue, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)\n```\n\n![二值模式下的 OK 手勢](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_readme_ce6d0bfb083e.png)\n\n\n**皮膚掩膜模式處理**\n```python\nhsv = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)\n    \n#應用皮膚顏色範圍\nmask = cv2.inRange(hsv, low_range, upper_range)\n\nmask = cv2.erode(mask, skinkernel, iterations = 1)\nmask = cv2.dilate(mask, skinkernel, iterations = 1)\n\n#模糊\nmask = cv2.GaussianBlur(mask, (15,15), 1)\n#cv2.imshow(\"Blur\", mask)\n\n#按位與運算，保留皮膚區域\nres = cv2.bitwise_and(roi, roi, mask = mask)\n#轉為灰度\nres = cv2.cvtColor(res, cv2.COLOR_BGR2GRAY)\n```\n![皮膚掩膜模式下的 OK 手勢](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_readme_4b1ff8369a52.png)\n\n# 使用的CNN模型\n我在这个项目中使用的CNN模型是一个非常常见的架构，可以在许多关于CNN的教程中找到。通常，这种模型被用于基于MNIST数据集的数字\u002F手写体识别任务。\n\n```python\nmodel = Sequential()\nmodel.add(Conv2D(nb_filters, (nb_conv, nb_conv),\n                    padding='valid',\n                    input_shape=(img_channels, img_rows, img_cols)))\nconvout1 = Activation('relu')\nmodel.add(convout1)\nmodel.add(Conv2D(nb_filters, (nb_conv, nb_conv)))\nconvout2 = Activation('relu')\nmodel.add(convout2)\nmodel.add(MaxPooling2D(pool_size=(nb_pool, nb_pool)))\nmodel.add(Dropout(0.5))\n\nmodel.add(Flatten())\nmodel.add(Dense(128))\nmodel.add(Activation('relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(nb_classes))\nmodel.add(Activation('softmax'))\n```\n\n该模型共有12层：\n```\n_________________________________________________________________\nLayer (type)                 Output Shape              Param #   \n=================================================================\nconv2d_1 (Conv2D)            (None, 32, 198, 198)      320       \n_________________________________________________________________\nactivation_1 (Activation)    (None, 32, 198, 198)      0         \n_________________________________________________________________\nconv2d_2 (Conv2D)            (None, 32, 196, 196)      9248      \n_________________________________________________________________\nactivation_2 (Activation)    (None, 32, 196, 196)      0         \n_________________________________________________________________\nmax_pooling2d_1 (MaxPooling2 (None, 32, 98, 98)        0         \n_________________________________________________________________\ndropout_1 (Dropout)          (None, 32, 98, 98)        0         \n_________________________________________________________________\nflatten_1 (Flatten)          (None, 307328)            0         \n_________________________________________________________________\ndense_1 (Dense)              (None, 128)               39338112  \n_________________________________________________________________\nactivation_3 (Activation)    (None, 128)               0         \n_________________________________________________________________\ndropout_2 (Dropout)          (None, 128)               0         \n_________________________________________________________________\ndense_2 (Dense)              (None, 5)                 645       \n_________________________________________________________________\nactivation_4 (Activation)    (None, 5)                 0         \n=================================================================\n```\n总参数量：39,348,325.0\n可训练参数量：39,348,325.0\n\n# 训练\n在项目的1.0版本中，我仅使用了1204张图像进行训练。虽然预测概率尚可，但并不令人满意。因此，在2.0版本中，我将训练图像集增加到4015张，即每类803张样本。此外，我还新增了一个“无动作”类别，与原有的4种手势类别一起使用。\n\n我将模型训练了15个epoch。\n\n![训练准确率 vs 验证准确率](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_readme_be3f04105f5c.png)\n\n![训练损失 vs 验证损失](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_readme_4d5aec385d2e.png)\n\n\n# 可视化\nCNN擅长检测图像中的边缘，因此在图像分类等任务中非常有用。为了理解神经网络如何处理不同的手势输入，我们可以可视化各层的特征图内容。\n\n运行主脚本后，选择选项3以可视化给定图像的某一层或所有层（当前脚本从.\u002Fimgs目录加载图像，请根据实际情况调整）。\n```\n你想做什么？\n    1- 使用预训练模型进行手势识别及层可视化\n    2- 训练模型（你需要在.\\imgfolder下准备训练图像）\n    3- 可视化训练好的模型各层的特征图\n    3\n将加载默认权重文件\n图像编号7\n请输入要可视化的层数 -1\n(4015, 40000)\n按任意键\n每类样本数 - 803\n总层数 - 12\n正在导出第1层 - 激活函数 的滤波器数据\n正在导出第2层 - 卷积层 的滤波器数据\n正在导出第3层 - 激活函数 的滤波器数据\n正在导出第4层 - 最大池化层 的滤波器数据\n正在导出第5层 - Dropout 的滤波器数据\n无法导出第6层 - 展平层 的数据\n无法导出第7层 - 全连接层 的数据\n无法导出第8层 - 激活函数 的数据\n无法导出第9层 - Dropout 的数据\n无法导出第10层 - 全连接层 的数据\n无法导出第11层 - 激活函数 的数据\n按任意键继续\n```\n\n要了解Keras中具体实现方式，请查看gestureCNN.py中的visualizeLayer()函数：\n```python\nlayer = model.layers[layerIndex]\n\nget_activations = K.function([model.layers[0].input, K.learning_phase()], [layer.output,])\nactivations = get_activations([input_image, 0])[0]\noutput_image = activations\n```\n第4层对PUNCH手势的可视化\n![第4层对PUNCH手势的可视化](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_readme_2ad11264e9b2.png)\n\n第2层对STOP手势的可视化\n![第2层对STOP手势的可视化](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_readme_47a4bef5f242.png)\n\n\n\n# 结论\n那么接下来该怎么办呢？我想测试一下神经网络预测的响应速度，而游戏是一个很好的基准。我的Mac上没有安装任何游戏，不过Chrome浏览器中的恐龙跳跃游戏正好派上了用场。于是，我将“Punch”手势绑定到了恐龙角色的跳跃动作上。当然，也可以使用其他手势，但我认为Punch手势更容易操作。Stop手势也是一个不错的选择。\n\n结果就是这样：\n\n观看完整视频 - https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=lnFPvtCSsLA&t=49s\n\n![](https:\u002F\u002Fj.gifs.com\u002F58pxVx.gif)\n\n\n\n# 如果您想引用我的工作\nAbhishek Singh，“asingh33\u002FCNNGestureRecognizer: CNNGestureRecognizer（版本1.3.0）”，Zenodo。http:\u002F\u002Fdoi.org\u002F10.5281\u002Fzenodo.1064825，2017年11月。\n请告诉我您是如何在自己的项目中使用这项工作的。我很期待看到您的成果。祝您好运！\n\n\n\n别忘了去看看我另一个GitHub项目，我在那里使用了这个框架，并应用监督学习技术来训练Chrome浏览器中的TRex角色 :)\nhttps:\u002F\u002Ftechkblog.com\u002Fteach-an-ai-to-play-game-using-supervised-learning\u002F\nYouTube链接 - https:\u002F\u002Fyoutu.be\u002FZZgvklkQrss\n\n![](https:\u002F\u002Fj.gifs.com\u002FDRg4mn.gif)","# CNNGestureRecognizer 快速上手指南\n\nCNNGestureRecognizer 是一个基于卷积神经网络（CNN）的手势识别开源项目，支持通过摄像头实时识别\"OK\"、“和平”、“停止”、“出拳”及“无手势”五种状态。本项目使用 Keras 构建模型，支持 TensorFlow 后端，并集成 OpenCV 进行图像预处理。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**: Windows 或 macOS (Linux 未明确测试但通常兼容)\n*   **Python 版本**: Python 3.6.1 (推荐 3.6+)\n*   **核心依赖**:\n    *   OpenCV 3.4.1+\n    *   Keras 2.0.2+\n    *   TensorFlow 1.2.1+ (推荐使用，Theano 已停止维护)\n*   **推荐方案**: 建议安装 **Anaconda**，以便轻松管理虚拟环境和多版本的 Python、OpenCV 等依赖包。\n\n> **注意**：原项目提及的 Theano 后端已过时，本指南默认使用 **TensorFlow** 作为后端。\n\n## 安装步骤\n\n### 1. 克隆项目\n首先从 GitHub 获取源代码：\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fasingh33\u002FCNNGestureRecognizer.git\ncd CNNGestureRecognizer\n```\n\n### 2. 创建虚拟环境 (推荐)\n使用 Conda 创建隔离环境并安装基础依赖：\n```bash\nconda create -n gesture_env python=3.6\nconda activate gesture_env\n```\n\n### 3. 安装依赖库\n安装必要的 Python 包。由于原项目依赖较老，若遇到兼容性问题，可尝试安装较新的稳定版（通常向下兼容）：\n```bash\npip install opencv-python==3.4.1.15 keras==2.0.2 tensorflow==1.2.1 numpy matplotlib h5py\n```\n*(注：如果 `tensorflow==1.2.1` 在当前系统难以安装，可尝试安装 `tensorflow>=1.4` 并调整 Keras 版本，但需确保代码中无废弃 API 调用)*\n\n### 4. 下载预训练权重\n项目将预训练权重文件托管在 Google Drive，需根据操作系统手动下载并放入项目根目录：\n\n*   **macOS 用户**:\n    下载链接: [pretrained_weights_MacOS.hdf5](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1j7K96Dkatz6q6zr5RsQv-t68B3ZOSfh0\u002Fview)\n    ```bash\n    # 下载后重命名为 pretrained_weights_MacOS.hdf5\n    ```\n\n*   **Windows 用户**:\n    下载链接: [pretrained_weights_WinOS.hdf5](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1PA7RjxHYQsWfIvcZAGeoZ-ExYSttFuGs\u002Fview)\n    ```cmd\n    rem 下载后重命名为 pretrained_weights_WinOS.hdf5\n    ```\n\n## 基本使用\n\n完成上述步骤后，即可运行手势识别主程序。\n\n### 启动识别程序\n\n**在 macOS 上运行：**\n```bash\nexport KERAS_BACKEND=tensorflow\npython trackgesture.py\n```\n\n**在 Windows 上运行：**\n```cmd\nset \"KERAS_BACKEND=tensorflow\"\npython trackgesture.py\n```\n\n### 操作说明\n运行脚本后，终端将出现交互菜单：\n```text\nWhat would you like to do ?\n    1- Use pretrained model for gesture recognition & layer visualization\n    2- Train the model (you will require image samples for training under .\\imgfolder)\n    3- Visualize feature maps of different layers of trained model\n```\n\n*   **实时识别**: 输入 `1` 并回车。程序将调用摄像头，实时检测并显示手势类别（OK, PEACE, STOP, PUNCH, NOTHING）。\n*   **重新训练**: 输入 `2`。您可以使用 `.\u002Fimgfolder_b` 中的样本或自行采集的新数据重新训练模型。\n*   **可视化特征图**: 输入 `3`。可以观察 CNN 不同层对输入图像的特征提取效果（需修改代码指定图片路径）。\n\n### 摄像头模式切换\n程序内置了两种图像处理模式，可在代码中根据环境光线和背景复杂度切换：\n1.  **Binary Mode (二值化模式)**: 适用于背景简单（如白墙）的场景，使用自适应阈值处理。\n2.  **SkinMask Mode (肤色掩膜模式)**: 适用于背景复杂但光线充足的场景，通过 HSV 颜色空间提取肤色区域。","某智能家居团队正在开发一套无需接触即可控制客厅设备的原型系统，希望用户能通过简单的手势切换灯光模式或调节音量。\n\n### 没有 CNNGestureRecognizer 时\n- 团队需从零构建卷积神经网络架构，耗费数周时间调试 Keras 与 TensorFlow 的兼容性，且难以处理 Theano 已停止维护的技术债务。\n- 手势识别准确率极低，无法区分\"OK\"、“和平”与“出拳”等相似动作，导致误触发频繁，用户体验极差。\n- 实时预览时帧率（FPS）严重下降，画面卡顿明显，无法满足流畅交互的基本需求。\n- 缺乏可视化的训练反馈机制，开发人员只能盲目调整参数，无法直观观察模型在不同层级的特征提取效果。\n\n### 使用 CNNGestureRecognizer 后\n- 直接复用基于 Keras + TensorFlow 预训练的成熟模型，内置针对 MacOS 和 Windows 优化的权重文件，将环境搭建与模型部署时间从数周缩短至几天。\n- 利用其内置的背景减除过滤器和预训练的 5 种手势（OK、PEACE、STOP、PUNCH、NOTHING），显著提升了复杂光线下的识别精度，误触率大幅降低。\n- 得益于性能优化更新，开启预测模式后实现了零帧率损耗，确保了摄像头捕捉与指令响应的实时流畅性。\n- 通过应用内嵌的实时概率图表，开发人员能直观监控预测置信度，快速定位并优化特定手势的训练数据。\n\nCNNGestureRecognizer 通过提供开箱即用的高性能预训练模型与可视化工具，让开发者能跳过繁琐的算法底层构建，专注于上层交互逻辑的创新。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fasingh33_CNNGestureRecognizer_6f96e770.png","asingh33","Abhishek Singh","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fasingh33_9f4a7347.jpg","Enjoy coding, learn new technologies.  Interested in Machine Learning, Game development and related subjects and Computer Vision.","Ex-INTEL","India","abhishekk.singhh@gmail.com",null,"https:\u002F\u002Ftechkblog.com","https:\u002F\u002Fgithub.com\u002Fasingh33",[83],{"name":84,"color":85,"percentage":86},"Python","#3572A5",100,1042,355,"2026-04-02T08:38:11","MIT",4,"macOS, Windows","未说明 (基于 TensorFlow 1.2.1\u002FTheano 0.9.0，可能支持 CPU 或旧版 GPU，但文档未明确指定 CUDA 版本或显卡型号)","未说明",{"notes":96,"python":97,"dependencies":98},"Theano 已停止维护且不再受支持，建议改用 TensorFlow 后端。预训练权重文件较大（约 150MB），需从 Google Drive 单独下载，且分为 macOS 和 Windows 两个不同版本。建议使用 Anaconda 创建虚拟环境以管理依赖包版本。项目支持两种手势捕捉模式：二值化模式（适合纯色背景）和皮肤掩膜模式（适合复杂背景）。","3.6.1",[99,100,101,102],"OpenCV==3.4.1","Keras==2.0.2","TensorFlow==1.2.1","Theano==0.9.0",[14],[105,106,107,108,109,110],"gesture-recognition","machine-learning","theano","python","tensorflow","keras","2026-03-27T02:49:30.150509","2026-04-17T08:25:21.346968",[114,119,124,129,133,138],{"id":115,"question_zh":116,"answer_zh":117,"source_url":118},36703,"为什么使用预训练模型预测时，结果总是显示为\"NOTHING\"类且准确率高达 99.9%？","这是因为预训练的权重文件具有平台特异性。默认提供的权重文件是在 Windows 上训练的，因此无法直接在 macOS 或 Linux 上使用。\n解决方案：\n1. 拉取最新的代码，仓库中现已提供针对 macOS 和 Windows 的特定权重文件链接，请下载使用对应系统的文件。\n2. 或者，您可以使用自己的数据重新训练模型。\n3. 如果准确率仍然较低，建议尝试在更简单的背景（如纯色墙壁）和充足的光线下进行测试，或采集更多数据自行训练以适应您的场景。","https:\u002F\u002Fgithub.com\u002Fasingh33\u002FCNNGestureRecognizer\u002Fissues\u002F25",{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},36704,"在 Ubuntu\u002FLinux 系统上重新训练模型时，为什么验证准确率（Validation Accuracy）没有提升？","这通常是因为 Ubuntu 系统下的文件列表默认未按文件名排序，导致加载图像数据的顺序混乱，从而使标签与图像不匹配。\n解决方案：\n修改代码中加载图像的部分，对文件列表进行排序。将：\n`immatrix = np.array([np.array(Image.open(path2+ '\u002F' + images).convert('L')).flatten() for images in imlist], dtype = 'f')`\n改为：\n`immatrix = np.array([np.array(Image.open(path2+ '\u002F' + images).convert('L')).flatten() for images in sorted(imlist)], dtype = 'f')`\n添加 `sorted()` 函数即可解决该问题。","https:\u002F\u002Fgithub.com\u002Fasingh33\u002FCNNGestureRecognizer\u002Fissues\u002F8",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},36705,"运行程序时遇到摄像头输入无法捕获或相关错误，该如何解决？","如果程序无法捕获摄像头画面，可能是摄像头索引设置不正确。\n解决方案：\n打开 `trackgesture.py` 文件，找到初始化摄像头的代码行：\n`cap = cv2.VideoCapture(0)`\n将参数 `0` 改为 `1`（即 `cap = cv2.VideoCapture(1)`），然后重新运行程序尝试。这通常能解决多摄像头或默认索引无效的问题。","https:\u002F\u002Fgithub.com\u002Fasingh33\u002FCNNGestureRecognizer\u002Fissues\u002F7",{"id":130,"question_zh":131,"answer_zh":132,"source_url":118},36706,"预训练模型的准确率不高，如何提高识别效果？","项目提供的预训练文件并非完美，因为它们仅基于单个用户（作者本人）和两种模式的数据训练，可能存在过拟合。\n提高准确率的建议：\n1. 环境优化：在背景简单（如白墙）且光线充足的环境下使用。\n2. 数据增强：利用框架提供的功能，采集并创建您自己的数据库进行训练。\n3. 重新训练：如果您的使用场景与原作者差异较大，强烈建议使用自己的数据重新训练模型以获得最佳效果。",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},36707,"在 Linux 系统上运行项目需要注意什么？","维护者指出，该项目主要在 OSX 和 Windows 上经过测试，Linux 版本可能需要额外调整。\n注意事项：\n1. 权重文件不通用：不要直接使用默认的 Windows 权重文件，需重新训练或使用专门提供的 Linux\u002FmacOS 权重（如果有）。\n2. 文件排序问题：Linux 文件系统可能不会按文件名自动排序，导致训练数据错乱，务必在代码中对图像文件列表进行 `sorted()` 排序处理。\n3. 后端配置：运行时应指定后端，例如使用命令 `KERAS_BACKEND=theano python3 trackgesture.py`。","https:\u002F\u002Fgithub.com\u002Fasingh33\u002FCNNGestureRecognizer\u002Fissues\u002F27",{"id":139,"question_zh":140,"answer_zh":141,"source_url":128},36708,"遇到\"ImportError: Failed to import pydot\"错误，即使安装了 pydot 和 graphviz 仍然存在，怎么办？","虽然报错信息指向 pydot 或 graphviz 缺失，但在某些情况下（特别是 Windows 平台），这可能掩盖了摄像头输入未正确捕获的根本原因。\n排查步骤：\n1. 首先确认是否已正确安装 graphviz 软件本身（不仅仅是 Python 包），并将其添加到系统环境变量 PATH 中。\n2. 如果库已正确安装但问题依旧，请检查摄像头连接。尝试修改 `trackgesture.py` 中的 `cv2.VideoCapture(0)` 为 `cv2.VideoCapture(1)` 来切换摄像头索引，确保程序能读取到视频流。",[143,147,152],{"id":144,"version":145,"summary_zh":79,"released_at":146},295097,"v2.0.0","2019-11-21T14:06:40",{"id":148,"version":149,"summary_zh":150,"released_at":151},295098,"1.3.0","CNNGestureRecognizer 版本 1.3.0","2017-11-22T17:13:00",{"id":153,"version":154,"summary_zh":155,"released_at":156},295099,"1.2.9","CNNGestureRecognizer 版本 1.2.9","2017-11-22T17:09:41"]