Skip to content
Merged
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
852109a
完成选题并提交
jiangyi2302 Dec 18, 2025
6fe47f5
完成选题并提交
jiangyi2302 Dec 18, 2025
af14f99
完成选题并提交
jiangyi2302 Dec 18, 2025
c1ae4ac
完成选题并提交
jiangyi2302 Dec 18, 2025
ddaa9d5
完成选题并提交
jiangyi2302 Dec 18, 2025
d66962d
完成选题并提交
jiangyi2302 Dec 18, 2025
9293e17
完成选题并提交
jiangyi2302 Dec 18, 2025
e8fef31
完成选题并提交
jiangyi2302 Dec 18, 2025
7a9fab5
完成选题并提交
jiangyi2302 Dec 18, 2025
79cc531
完成选题并提交
jiangyi2302 Dec 18, 2025
29f7770
完成选题并提交
jiangyi2302 Dec 18, 2025
4b1aca1
完成选题并提交
jiangyi2302 Dec 18, 2025
edcd60e
完成选题并提交
jiangyi2302 Dec 18, 2025
e43731a
完成选题并提交
jiangyi2302 Dec 18, 2025
0f8575a
完成选题并提交
jiangyi2302 Dec 18, 2025
60db4b4
完成选题并提交
jiangyi2302 Dec 18, 2025
d9535ba
完成选题并提交
jiangyi2302 Dec 18, 2025
7886980
完成选题:更新Unmanned_Aircraft_System的README.md
jiangyi2302 Dec 18, 2025
b498537
提交选题
jiangyi2302 Dec 19, 2025
bc14972
修改选题
jiangyi2302 Dec 19, 2025
c0679cb
完成选题并提交
jiangyi2302 Dec 19, 2025
2d1e296
重命名文件夹:Unmanned_Aircraft_System → UAV_Small_Target_Recognition
jiangyi2302 Dec 19, 2025
d49e121
完成选题并提交
jiangyi2302 Dec 19, 2025
2c57293
重命名文件夹为Gesture_Control_for_Airsim_UAV,并更新README.md补充无人机手势控制内容
jiangyi2302 Dec 19, 2025
d5f2c9d
重命名文件夹:Gesture_Control_for_Airsim_UAV → Drone_gesture_operation
jiangyi2302 Dec 19, 2025
f1d3167
更新Drone_gesture_operation/README.md:基于轻量级 CNN 的无人机手势操控指令识别
jiangyi2302 Dec 19, 2025
5a5639c
无人机手势识别
jiangyi2302 Dec 20, 2025
0ecd007
更新Drone_gesture_operation:同步main.py代码
jiangyi2302 Dec 20, 2025
786c598
无人机手势识别
jiangyi2302 Dec 20, 2025
2bd5954
优化Drone_gesture_operation/main.py:给代码添加注释,增加可读性
jiangyi2302 Dec 20, 2025
c6eea87
新增Drone_gesture_operation/keypoint_classifier.py:无人机手势关键点分类器
jiangyi2302 Dec 21, 2025
f2dc1af
优化Drone_gesture_operation/main.py:可切换三种模式
jiangyi2302 Dec 21, 2025
0b9f52d
给代码添加注释
jiangyi2302 Dec 22, 2025
049d707
能够识别手势:拳头
jiangyi2302 Dec 22, 2025
d5a28cd
优化手势切换的流畅度
jiangyi2302 Dec 22, 2025
d15abc4
使画面帧率更稳定
jiangyi2302 Dec 23, 2025
f507f0e
添加了对五指张开的手势识别
jiangyi2302 Dec 24, 2025
032575a
修改了对手指的识别
jiangyi2302 Dec 24, 2025
89e210e
修改了手势识别后的输出
jiangyi2302 Dec 24, 2025
b40eaa4
添加了识别区域
jiangyi2302 Dec 25, 2025
5016971
添加识区别
jiangyi2302 Dec 25, 2025
dcb1122
优化手势识别的准确度
jiangyi2302 Dec 26, 2025
856383b
备注:你改了什么
jiangyi2302 Dec 27, 2025
2347d15
在光线暗时也能识别
jiangyi2302 Dec 27, 2025
e0f4586
Merge branch 'main' into main
jiangyi2302 Dec 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions src/Drone_gesture_operation/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,19 @@ def __init__(self, target_fps=30):
self.frame_interval = 1.0 / target_fps
self.last_frame_time = time.time()

# 2. 肤色检测(适配明亮+暗光环境,核心优化:新增暗光阈值)
# 明亮环境阈值(保留原有,适配强光场景)
self.skin_lower_bright = np.array([0, 10, 50], np.uint8)
self.skin_upper_bright = np.array([30, 255, 255], np.uint8)
# 暗光环境阈值(降低S和V下限,放宽H范围,适配弱光场景)
self.skin_lower_dark = np.array([0, 5, 15], np.uint8)
self.skin_upper_dark = np.array([40, 180, 200], np.uint8)
# 默认使用暗光阈值(优先适配弱光,也可通过自适应逻辑切换)
self.skin_lower = self.skin_lower_dark
self.skin_upper = self.skin_upper_dark
self.kernel = np.ones((5, 5), np.uint8)

# 3. 核心参数(精准适配手势特征,优化暗光下轮廓识别)
# 2. 肤色检测(适配更多光线)
self.skin_lower = np.array([0, 10, 50], np.uint8)
self.skin_upper = np.array([30, 255, 255], np.uint8)
Expand All @@ -24,6 +37,7 @@ def __init__(self, target_fps=30):
self.fist_area_ratio = 0.75 # 握拳凸包面积比
# 手指计数参数
self.defect_depth_threshold = 8 # 降低深度阈值,提高up识别率
self.min_contour_area = 300 # 核心优化:从600降至300,适配暗光下小手部轮廓
self.min_contour_area = 600 # 降低最小面积,适配小手掌
# 大拇指识别参数(宽松但精准)
self.thumb_aspect_ratio = 0.45 # 放宽宽高比
Expand Down Expand Up @@ -297,13 +311,43 @@ def capture_frames(self, cap):
time.sleep(self.frame_interval * 0.5)

def process_frame(self, frame):
"""核心处理逻辑(暗光增强优化)"""
"""核心处理逻辑"""
frame = cv.flip(frame, 1)
frame = self._draw_recognition_area(frame)
roi, (roi_x, roi_y) = self._get_roi(frame)
current_gesture = "None"

if roi.size > 0:
# 预处理(暗光增强:亮度+对比度+去噪+形态学,核心优化)
roi_small = cv.resize(roi, (400, 300))

# 步骤1:亮度和对比度增强(解决暗光下图像偏暗、细节不清晰)
alpha = 1.8 # 对比度增益(>1提升对比度,极暗可调整至2.2)
beta = 40 # 亮度增益(>0提升亮度,极暗可调整至60)
roi_enhanced = cv.convertScaleAbs(roi_small, alpha=alpha, beta=beta)

# 步骤2:高斯模糊去噪(去除暗光下的椒盐噪声,避免干扰轮廓提取)
roi_denoised = cv.GaussianBlur(roi_enhanced, (5, 5), 0)

# 步骤3:(可选)自适应亮度判断,自动切换明暗阈值(兼顾所有环境)
gray_roi = cv.cvtColor(roi_small, cv.COLOR_BGR2GRAY)
avg_brightness = np.mean(gray_roi)
if avg_brightness < 50: # 亮度阈值,<50判定为暗光
self.skin_lower = self.skin_lower_dark
self.skin_upper = self.skin_upper_dark
else: # >50判定为明亮环境
self.skin_lower = self.skin_lower_bright
self.skin_upper = self.skin_upper_bright

# 步骤4:转换HSV并提取肤色掩码(使用适配当前环境的阈值)
hsv = cv.cvtColor(roi_denoised, cv.COLOR_BGR2HSV)
mask = cv.inRange(hsv, self.skin_lower, self.skin_upper)

# 步骤5:优化形态学操作(暗光下增加膨胀迭代,填补手部区域孔洞)
mask = cv.morphologyEx(mask, cv.MORPH_OPEN, self.kernel, iterations=1) # 开运算:去除小噪声
mask = cv.morphologyEx(mask, cv.MORPH_DILATE, self.kernel, iterations=2) # 膨胀:填补手部孔洞,增强轮廓连续性
mask = cv.morphologyEx(mask, cv.MORPH_CLOSE, self.kernel, iterations=2) # 闭运算:平滑轮廓边缘,去除残留小空洞
# 预处理(增强手部轮廓)
roi_small = cv.resize(roi, (400, 300))
hsv = cv.cvtColor(roi_small, cv.COLOR_BGR2HSV)
Expand All @@ -319,6 +363,7 @@ def process_frame(self, frame):
features = self.analyze_contour(cnt)

if features and features["area"] > self.min_contour_area:
# 绘制轮廓(调试用,可直观看到手部提取效果)
# 绘制轮廓(调试用)
self.frame_queue = [frame] # 只保留最新帧
time.sleep(self.frame_interval * 0.5)
Expand Down Expand Up @@ -637,11 +682,13 @@ def run(self):
# 提示信息
print("=" * 60)
print(f"✅ 帧率锁定 {self.target_fps} 帧 | ESC退出")
print("💡 暗光优化版手势识别(高稳定性):")
print("💡 优化版手势识别(高稳定性):")
print(" ✊ 握拳 → stop(高稳定)")
print(" 👍 竖大拇指 → up(精准识别)")
print(" 🤘 食指+中指 → front")
print(" 🖐️ 手掌张开 → back")
print("📌 已适配暗光环境,极暗可调整alpha/beta参数")
print("=" * 60)

# 主循环(修复帧率控制)
Expand Down Expand Up @@ -715,6 +762,9 @@ def run(self):

# 处理并显示
frame_show = self.process_frame(frame)
cv.imshow("Hand Gesture Recognition (Dark Mode Optimized)", frame_show)

# 更新时间戳
cv.imshow("Hand Gesture Recognition (Optimized)", frame_show)

# 更新时间戳
Expand All @@ -736,6 +786,8 @@ def run(self):


if __name__ == '__main__':
recognizer = StableFPSHandRecognizer(target_fps=20)
recognizer.run()
# 20帧兼顾流畅度和识别稳定性
recognizer = StableFPSHandRecognizer(target_fps=20)
recognizer.run()
Expand Down
Loading