描述
<div class="document">
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">注:* 为必填项</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><strong><span style="color: #0093e6;">请在报名阶段填写 ↓</span></strong></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">* 1、项目功能介绍</h3>
<hr class="horizontal-splitline normal-bold-2">
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">请输入内容…</span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt"> 项目名称:基于STM32F407VET6的智能目标随动系统</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt"> 项目背景:在安防监控、智能玩具、自动跟踪拍摄等领域,需要系统能够自动识别并跟踪移动目标。本项目设计一个低成本、高精度的目标随动系统,通过摄像头捕捉目标,控制云台实时跟踪目标移动。</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt"> 解决问题:传统手动跟踪耗时费力,且容易丢失目标。本系统通过图像识别算法自动识别目标,并通过双轴云台实现实时跟踪,解决人工跟踪的痛点</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">注:主题不限,可以是解决生活/工作中的某个问题、为某个人群/场景设计的方案、毕业设计/课程设计/DIY项目/纯属炫酷项目等。主要讲一下自己通过什么手段解决了什么问题。</span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">*2、项目属性</h3>
<hr class="horizontal-splitline normal-bold-2">
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">请输入内容…</span></p>
<ul>
<li>
<p class="ds-markdown-paragraph"><strong>首次公开</strong>:是</p>
</li>
<li>
<p class="ds-markdown-paragraph"><strong>原创性</strong>:是(结合了开源技术但整体架构为原创设计)</p>
</li>
<li>
<p class="ds-markdown-paragraph"><strong>获奖历史</strong>:无</p>
</li>
<li>
<p class="ds-markdown-paragraph"><strong>答辩经历</strong>:无</p>
</li>
</ul>
<p> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">注:请说明项目是否首次公开;项目是否为原创;项目是否曾经在其他比赛中获奖,若有获奖则叙述获奖详情;项目是否在学校参加过答辩。</span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">* 3、开源协议</h3>
<hr class="horizontal-splitline normal-bold-2">
<div>
<p> GPL-3.0 的核心在于<strong>开源</strong>,而非限制商业用途。用户可以自由地将软件用于商业目的,但必须遵守以下规则:</p>
</div>
<div>
<ol class="b_dList">
<li>
<p><strong>源码开放</strong>:分发时必须提供源代码,确保接收者能够自由修改和使用。</p>
</li>
<li>
<p><strong>许可证传递性</strong>:任何基于 GPL 软件的修改版本也必须遵守 GPL 协议,确保自由的延续。</p>
</li>
<li>
<p><strong>专利保护</strong>:贡献者自动授予专利许可,防止专利诉讼破坏开源生态。</p>
</li>
<li>
<p><strong>破解允许</strong>:用户可以自由破解软件的技术限制</p>
</li>
</ol>
</div>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">注:利他即利己,请认真阅读下述内容。</span></p>
<ol style="line-height: 1.8;">
<li class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-hanging-indent-1.6em" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">拥抱开源,赋予项目无限价值。建议项目核心功能开源80%以上;</span></li>
<li class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-hanging-indent-1.6em" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">2、若某一部分功能不可替代且删掉之后项目无法解决对应的问题,则这一部分实现的功能就是项目的核心功能;比如设计了一台电子负载且设计了一款上位机软件监控功率变化,则电子负载为核心功能,上位机软件为辅助功能;比如电子负载中使用了一款隔离485模块与上位机通信,则此485模块实现的通讯功能为辅助功能; </span></li>
<li class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-hanging-indent-1.6em" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">项目应选择适合自己的<span style="text-decoration: underline;"><a href="/posts/98fdb2accd754af7b51990790db3b47a" target="_blank">开源协议</a></span>,若项目引用其他开源项目,应注明来源并遵循原作者的开源协议规定;原创项目推荐使用GPL3.0开源协议;</span></li>
<li class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-hanging-indent-1.6em" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">直接引用开源项目的原电路或原代码实现的功能不可作为自己项目的核心功能、使用市场上通用模块直接实现的功能不可作为自己项目的核心功能。</span></li>
</ol>
<p style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><strong><span style="color: #0093e6;">请在竞赛阶段填写 ↓</span></strong></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">*4、硬件部分</h3>
<hr class="horizontal-splitline normal-bold-2">
<p>硬件部分</p>
<p>></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt">STM32F407ZET6</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt">2个370电机</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt">树莓派</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt">摄像头</p>
<p>;</p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;"> 注:请前往<span style="text-decoration: underline;"><a href="https://lceda.cn/editor" target="_blank">嘉立创EDA</a> </span>生成/上传设计文件,文件完成后,相关文稿将自动生成至项目详情;这里可以详细说明您的项目实现原理和机制、注意事项、调试方法、测试方法等。推荐图文并茂的形式向别人介绍您的想法。 </span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">*5、软件部分</h3>
<hr class="horizontal-splitline normal-bold-2">
<p>工程结构</p>
<p>/</p>
<div>
<div>importcv2ascv</div>
<div>import numpy as np</div>
<div>import serial</div>
<div>import os</div>
<br>
<div># 摄像头与串口初始化</div>
<div>cap = cv.VideoCapture(0)</div>
<div>ser = serial.Serial('/dev/ttyAMA0', 115200, timeout=1)</div>
<div>os.system("v4l2-ctl -d /dev/video0 --set-ctrl=auto_exposure=1")</div>
<div>os.system("v4l2-ctl -d /dev/video0 --set-ctrl=exposure_time_absolute=120")</div>
<div>os.system("v4l2-ctl -d /dev/video0 --set-ctrl=white_balance_automatic=0")</div>
<div>#os.system("v4l2-ctl --set-fmt-video=width=320,height=240")</div>
<div># 颜色阈值配置</div>
<div>lower_green = np.array([30, 20, 194])</div>
<div>upper_green = np.array([125, 255, 255])</div>
<div>lower_red = np.array([100, 0, 242])</div>
<div>upper_red = np.array([180, 60, 255])</div>
<br>
<div>AREA_THRESH = 2000</div>
<div>DEDUP_THRESH = 30</div>
<div>CENTER_THRESH = 10</div>
<div>CONTOUR_COLOR = (0, 255, 0)</div>
<div>POINT_COLOR = (0, 255, 0) # 用于画顶点/中点的绿色</div>
<div>CENTER_COLORR = (255, 0, 0)</div>
<div>CENTER_COLOR = (0, 0, 255) # 用于画矩形中心的红色</div>
<div>LINE_THICKNESS = 2</div>
<br>
<div># ============ 新增常量(不影响原有数值) ============</div>
<div>WHITE_RATIO_THRESH = 0.50 # ROI 内白色≥40% 判定为目标</div>
<div>WHITE_S_MAX = 255 # S
<div>WHITE_V_MIN = 130 # V > 200</div>
<div># =====================================================</div>
<br>
<div># 鼠标回调:点击打印HSV值,用于调试</div>
<div>def on_mouse(event, x, y, flags, param):</div>
<div> if event == cv.EVENT_LBUTTONDOWN:</div>
<div> pixel = param[y, x]</div>
<div> hsv_val = cv.cvtColor(np.uint8([[pixel]]), cv.COLOR_BGR2HSV)[0][0]</div>
<div> print(f"HSV at ({x}, {y}) = {hsv_val}")</div>
<br>
<div># 计算轮廓中心</div>
<div>def get_center(contour):</div>
<div> M = cv.moments(contour)</div>
<div> if M["m00"] == 0:</div>
<div> return None</div>
<div> return np.array([M["m10"] / M["m00"], M["m01"] / M["m00"]])</div>
<br>
<div># 去重矩形(保留逻辑以兼容,但后面只取最大一个)</div>
<div>def deduplicate_rects(rects, thresh=DEDUP_THRESH):</div>
<div> centers, unique = [], []</div>
<div> for r in rects:</div>
<div> c = get_center(r)</div>
<div> if c is None:</div>
<div> continue</div>
<div> if all(np.linalg.norm(c - c0) > thresh for c0 in centers):</div>
<div> centers.append(c)</div>
<div> unique.append(r)</div>
<div> return unique</div>
<br>
<div># ============ 新增:计算 ROI 白色占比 =================</div>
<div>def white_ratio_in_rect(approx, hsv_img):</div>
<div> """返回 (白色占比, ROI 白色掩膜)"""</div>
<div> mask_roi = np.zeros(hsv_img.shape[:2], dtype=np.uint8)</div>
<div> cv.fillPoly(mask_roi, [approx.reshape(-1, 1, 2)], 255)</div>
<br>
<div> lower_white = np.array([28, 0, WHITE_V_MIN]) #= 0 else '0'</div>
<div> sy = '1' if my >= 0 else '0'</div>
<div> #payload += f"{sx}{abs(mx):03d}{sy}{abs(my):03d};"</div>
<div> send_frame(payload)</div>
<div> elif recv == b'd2':</div>
<div> payload = ""</div>
<div> for _, center_rel in output:</div>
<div> cx, cy = center_rel</div>
<div> sx = '1' if cx >= 0 else '0'</div>
<div> sy = '1' if cy >= 0 else '0'</div>
<div> payload += f"{sx}{abs(cx):03d}{sy}{abs(cy):03d};"</div>
<div> print(f"center:({cx}),({cy})")</div>
<div> if green_pos_rel:</div>
<div> gx, gy = green_pos_rel</div>
<div> if red_pos_rel:</div>
<div> rx, ry = red_pos_rel</div>
<div> sx = '1' if rx >= 0 else '0'</div>
<div> sy = '1' if ry >= 0 else '0'</div>
<div> #payload += f"{sx}{abs(rx):03d}{sy}{abs(ry):03d};"</div>
<div> #print(f"ziguang:({rx}),({ry})")</div>
<div> send_frame(payload)</div>
<br>
<div> # ============ 新增:白色全图掩膜显示 =============</div>
<div> lower_white = np.array([0, 0, WHITE_V_MIN])</div>
<div> upper_white = np.array([180, WHITE_S_MAX, 255])</div>
<div> mask_white = cv.inRange(hsv, lower_white, upper_white)</div>
<div> mask_white = cv.morphologyEx(mask_white, cv.MORPH_OPEN, kernel)</div>
<div> #cv.imshow("white_mask", mask_white)</div>
<div> # ==================================================</div>
<br>
<div> # 显示窗口与回调</div>
<div> #cv.imshow("Contours", img)</div>
<div> #cv.setMouseCallback("Contours", on_mouse, param=img)</div>
<div> #cv.imshow("zise", mask_red)</div>
<div> if cv.waitKey(1) & 0xFF == ord('q'):</div>
<div> break</div>
<br>
<div># 释放资源</div>
<div>cap.release()</div>
<div>ser.close()</div>
<div>#cv.destroyAllWindows()</div>
</div>
<p> </p>
<p> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">注:若您的项目涉及软件开发,请在附件上传对应的工程源码。这里可以详细说明您的软件流程图、功能模块框图、相关算法的解释或科普、源码结构、编译环境的搭建和配置、源码编译方法、程序烧录方法等。推荐图文并茂的形式向别人介绍您的想法。</span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt pap-left-indent-1.6em" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">*6、BOM清单</h3>
<hr class="horizontal-splitline normal-bold-2">
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">请输入内容…</span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">注:项目涉及的BOM清单。在<span style="text-decoration: underline;"><a href="https://lceda.cn/editor" target="_blank">嘉立创EDA</a> </span>生成/上传设计文件后,BOM将自动生成至项目详情;建议包括型号、品牌、名称、封装、采购渠道、用途等内容。具体内容和形式应以表达清楚项目构成为准。 </span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">*7、大赛LOGO验证</h3>
<hr class="horizontal-splitline normal-bold-2">
<p style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">请上传包含大赛logo的项目图片,logo以丝印形式印刷在PCB上面。</span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">点击zip下载大赛logo标识! <span style="text-decoration: underline;"><a href="https://image.lceda.cn/easyedaResource/images/d1bbfd69f9404f56901a0e7b849b7245.rar" target="_blank">(大赛标识).zip</a></span></span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<h3 class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;">* 8、演示您的项目并录制成视频上传</h3>
<hr class="horizontal-splitline normal-bold-2">
<p style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">视频要求:请横屏拍摄,分辨率不低于1280×720,格式Mp4/Mov,单个视频大小限100M内;</span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="color: #95a5a6; font-size: 14px;">视频标题:立创电赛:{项目名称}-{视频模块名称};如立创电赛:《自动驾驶》-团队介绍。</span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"><span style="font-size: 14px;"><a href="/posts/42551e8f2f2548cabc1c36626a42da94" target="_blank">前往查看更多详情 ></a></span></p>
<p class="paragraph text-align-type-left pap-line-1.3 pap-line-rule-auto pap-spacing-before-3pt pap-spacing-after-3pt" style="line-height: 1.8;"> </p>
</div>
</div>
评论(3)