无人机巡检 深度学习框架基于 YOLOv8 Streamlit 的无人机罂粟识别系统11111这个系统包含两个主要部分模型训练代码 (train.py)用于训练你的罂粟数据集。Streamlit 前端应用代码 (app.py)实现你描述的上传图片/视频、动态调节参数、表格显示结果和导出 Excel 的功能。1. 项目目录结构、文件夹中建立如下结构poppy_detection_system/ ├── dataset/ # 你的数据集文件夹 │ ├── images/ │ │ ├── train/ │ │ └── val/ │ └── labels/ │ ├── train/ │ └── val/ ├── runs/ # 训练结果输出目录 ├── app.py # Streamlit 主程序 ├── train.py # 训练脚本 ├── requirements.txt # 依赖库 └── data.yaml # 数据集配置2. 数据集配置 (data.yaml)在根目录下创建data.yaml根据你的描述罂粟检测配置如下path:./datasettrain:images/trainval:images/valnames:0:Poppy# 类别名称罂粟3. 模型训练代码 (train.py)这段代码用于训练你的 YOLOv8 模型生成best.pt权重文件。fromultralyticsimportYOLOdeftrain_model():# 1. 加载预训练模型 (yolov8n.pt, yolov8s.pt 等)modelYOLO(yolov8n.pt)# 2. 开始训练resultsmodel.train(datadata.yaml,# 数据集配置文件路径epochs100,# 训练轮数imgsz640,# 输入图片大小batch16,# 批次大小namepoppy_v1,# 实验名称device0,# 使用 GPU (0号显卡)若用CPU则设为 cpuprojectruns/train# 模型保存路径)if__name____main__:train_model()4. Streamlit 系统主代码 (app.py)这是你项目的核心包含了UI界面、模型推理、动态参数调节、表格统计、Excel导出等功能。注意为了代码能直接运行请确保你有一个训练好的模型文件例如runs/detect/poppy_v1/weights/best.pt或者将代码中的MODEL_PATH修改为你实际的路径。importstreamlitasstimportcv2importnumpyasnpimportpandasaspdimporttorchimporttempfileimportosfromPILimportImagefromultralyticsimportYOLOimportbase64fromioimportBytesIO# --- 页面配置 ---st.set_page_config(page_title罂粟毒品植株识别系统,layoutwide,page_icon)# --- 侧边栏配置 ---st.sidebar.title(️ 配置面板)st.sidebar.markdown(---)# 1. 参数调节conf_thresholdst.sidebar.slider(调整置信度,0.0,1.0,0.37,0.01)iou_thresholdst.sidebar.slider(调整IOU,0.0,1.0,0.37,0.01)# 2. 检测类型选择detection_typest.sidebar.radio(检测类型,(图片检测,视频检测,本地摄像头检测))st.sidebar.markdown(---)st.sidebar.info( 提示系统会自动根据硬件选择推理设备 (CPU/GPU))# --- 核心功能函数 ---# 自动加载模型 (缓存机制)st.cache_resourcedefload_model():# 这里假设你已经训练好了模型路径指向 best.pt# 如果没有请确保路径正确model_pathruns/detect/poppy_v1/weights/best.ptifnotos.path.exists(model_path):st.warning(f未找到模型文件{model_path}正在加载官方预训练模型...)returnYOLO(yolov8n.pt)returnYOLO(model_path)modelload_model()deviceGPUiftorch.cuda.is_available()elseCPUst.sidebar.success(f当前设备:{device})# 辅助函数绘制结果到图像defplot_detections(img,results):detectionsresults[0].boxes df_data[]forboxindetections:# 获取坐标和置信度x1,y1,x2,y2map(int,box.xyxy[0].tolist())confbox.conf[0].item()clsint(box.cls[0].item())labelresults[0].names[cls]# 过滤低置信度ifconfconf_threshold:# 绘制矩形框cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)# 绘制标签textf{label}{conf:.2f}cv2.putText(img,text,(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,255,0),2)# 收集数据用于表格df_data.append({类别:label,置信度:round(conf,2),坐标:f[{x1},{y1},{x2},{y2}]})returnimg,pd.DataFrame(df_data)# --- 主界面逻辑 ---st.title( 基于YOLOv8的罂粟毒品植株识别系统)# 1. 图片检测ifdetection_type图片检测:uploaded_filest.file_uploader(上传图片,type[jpg,png,jpeg])ifuploaded_file:imageImage.open(uploaded_file)img_npnp.array(image)img_rgbcv2.cvtColor(img_np,cv2.COLOR_RGB2BGR)# 推理resultsmodel(img_rgb,confconf_threshold,iouiou_threshold)# 处理结果result_img,dfplot_detections(img_rgb,results)result_imgcv2.cvtColor(result_img,cv2.COLOR_BGR2RGB)col1,col2st.columns(2)withcol1:st.image(image,caption原始图片,use_column_widthTrue)withcol2:st.image(result_img,caption检测结果,use_column_widthTrue)# 统计表格与导出ifnotdf.empty:st.success(f检测到{len(df)}个目标)st.dataframe(df)# Excel 导出功能towriteBytesIO()downloaded_filedf.to_excel(towrite,indexFalse,engineopenpyxl)towrite.seek(0)st.download_button(label 导出检测结果为 Excel,datatowrite,file_namedetection_results.xlsx,mimeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet)else:st.info(未检测到罂粟植株。)# 2. 视频检测elifdetection_type视频检测:uploaded_videost.file_uploader(上传视频,type[mp4,mov,avi])ifuploaded_video:tfiletempfile.NamedTemporaryFile(deleteFalse)tfile.write(uploaded_video.read())capcv2.VideoCapture(tfile.name)stframest.empty()stop_buttonst.button(停止检测)fpscap.get(cv2.CAP_PROP_FPS)whilecap.isOpened()andnotstop_button:ret,framecap.read()ifnotret:st.warning(视频播放完毕)break# 推理resultsmodel(frame,confconf_threshold,iouiou_threshold)result_frame,_plot_detections(frame,results)result_framecv2.cvtColor(result_frame,cv2.COLOR_BGR2RGB)stframe.image(result_frame,channelsRGB,use_column_widthTrue)cap.release()# 3. 摄像头检测elifdetection_type本地摄像头检测:runst.checkbox(开始摄像头检测)FRAME_WINDOWst.image([])cameracv2.VideoCapture(0)whilerun:ret,framecamera.read()ifret:resultsmodel(frame,confconf_threshold,iouiou_threshold)result_frame,_plot_detections(frame,results)result_framecv2.cvtColor(result_frame,cv2.COLOR_BGR2RGB)FRAME_WINDOW.image(result_frame,channelsRGB)else:st.error(无法读取摄像头画面)break5. 如何运行安装依赖打开终端Terminal运行pipinstallstreamlit ultralytics opencv-python pandas openpyxl训练模型如果还没有best.pt运行训练脚本python train.py训练完成后模型会保存在runs/detect/poppy_v1/weights/best.pt。启动系统在终端运行streamlit run app.py代码功能亮点解析动态参数调节使用st.sidebar.slider实现了置信度和 IOU 的实时调整无需重启程序。硬件自适应代码中使用了torch.cuda.is_available()检测是否有 GPU并在侧边栏显示当前运行设备。数据统计与导出检测到的目标会被存入 Pandas DataFrame并直接渲染为表格。使用BytesIO实现了内存中的 Excel 文件生成支持一键下载。多模态支持完美复刻了你要求的图片上传、视频文件上传和本地摄像头实时推理功能。这个代码框架完全符合你描述的“无人机罂粟识别系统”的需求既适合学术研究展示也具备实际应用的雏形。以上文字及代码仅供参考学习使用。