使用说明
farmOS叶MCP
面向工厂的farmOS工作流的MCP服务器:
- 摄像头捕捉+YOLO植物分类
- 在farmOS中创建/更新工厂资产
- 可选远程低置信度LLM审查
- 可选地图分割->多边形几何更新
- 捕获/上传活动日志图像
- 检索/导出工厂资产数据
- 清理非工厂和重复的活动日志图像
当前MCP工具
get_server_info()classify_camera_and_sync_asset(camera_index=0, delay_seconds=5.0, mode="ask", asset_name_override="")capture_and_upload_asset_images(image_count=5, interval_seconds=3.0, camera_index=0, start_delay_seconds=0.0, asset_id="", force_new_log=False)apply_segmented_image_geometry_to_asset(segmented_image_path, latitude=None, longitude=None, zoom=18, asset_id="", create_new_if_missing=True, new_asset_name="", land_type="bed")collect_data_with_coordinates(latitude=None, longitude=None, mode="ask", asset_name_override="", camera_index=0, classifier_delay_seconds=5.0, collection_interval_seconds=3.0, collection_duration_seconds=15.0, mapbox_zoom=18, mapbox_width=800, mapbox_height=800, segment_server_host="", segment_server_port=0, upload_to_activity_log=False)retrieve_plant_asset_data(plant_name, mode="ask", selected_asset_id="", selected_asset_name="", selected_asset_index=0, export_dir="")cleanup_asset_activity_log_images(mode="scan", asset_id="", asset_name_contains="", cleanup_scope="both", days_back=30, non_plant_conf_threshold=25.0, duplicate_hash_distance=6, keep_policy="highest_confidence", allow_multi_asset_execute=False, hard_delete_files=False, cleanup_local_captures=False, local_capture_dir="", confirmation_text="")get_collection_job_status(job_id)list_collection_jobs(limit=20)
建筑学
- MCP服务器:
farmos_leaf_mcp.py - farmOS API客户端:
farmOSPython包 - 视觉模型:外部YOLO脚本(
infer_image.py,live_preview.py) - 远程服务(ZeroMQ REQ/REP):
- 分段服务器(
send_image_for_segmentation) - 低置信度审核服务器(
request_low_confidence_text)
- 分段服务器(
需求
- Python 3.10+
- 摄像头可通过OpenCV访问
- farmOS凭据+OAuth客户端
- YOLO模型/脚本在磁盘上可用
- 几何流可选:Mapbox令牌+远程分割服务器
- GPS可选:NMEA串行设备(默认
/dev/ttyACM0)
安装:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
配置
复制和编辑环境文件:
cp .env.example .env
主要变量:
- farmOS身份验证:
FARMOS_HOST,FARMOS_USER,FARMOS_PASSWORD,FARMOS_CLIENT_ID,FARMOS_CLIENT_SECRET - YOLO路径:
LEAF_YOLO_DIR,LEAF_YOLO_MODEL_PATH,LEAF_YOLO_INFER_SCRIPT,LEAF_YOLO_LIVE_PREVIEW_SCRIPT - 摄像头方向:
LEAF_CAMERA_ROTATION(none,clockwise,counterclockwise,或180) - ZMQ远程服务器:
- 细分:
SEGMENT_SERVER_HOST,SEGMENT_SERVER_PORT - 低置信度法学硕士评审:
LOW_CONF_SERVER_HOST,LOW_CONF_SERVER_PORT
- 细分:
- Internet检查/重试:
FARMOS_INTERNET_CHECK_HOST,FARMOS_INTERNET_CHECK_PORT,FARMOS_INTERNET_CHECK_TIMEOUT_SECONDS - 地图图像源标记:
MAPBOX_TOKEN - 目录:
LEAF_CAPTURE_DIR,MAPBOX_INPUT_DIR,SEGMENTED_DIR,LEAF_EXPORT_DIR
跑
./run_mcp.sh
此脚本:
- 激活venv(如果存在)
- 负载
.env(如果存在) - 开始
farmos_leaf_mcp.py
自动收集
在没有Roo或MCP提示的情况下连续运行整个管道:
./run_auto_collect.sh
自动运行器使用前台/后台作业架构:
- 读取坐标
- 创建并打印持久的作业ID
- 前景:显示YOLO标识
AUTO_CLASSIFIER_DELAY_SECONDS - 前台:捕获所有定时数据图像
- 将作业排队并等待
AUTO_POLL_SECONDS(默认10秒) - 后台:执行远程LLM审查并创建farmOS资产
- 背景:上传捕获的图像并并行更新分割的几何体
- 读取下一个坐标,并仅在至少移动后启动另一个前台作业
AUTO_MIN_MOVEMENT_METERS
使用 mode="create_new" 因此不需要实时预览确认或覆盖提示。
前台收集可以在早期工作远程完成的同时继续进行。后台工作是
串行处理并存储在 AUTO_JOB_DATABASE.停止 Ctrl+C跑步者在等待
用于退出前排队的后台作业。
当前的虚拟坐标默认值使用有限的新测试点列表。每次检查 前进到下一个点,在最后一点之后,跑步者保持位置 不会不断收集同一位置周围的重复数据:
AUTO_COORDINATE_SOURCE=dummy
AUTO_DUMMY_COORDINATES="35.021200,135.741100;35.021900,135.742400;35.022700,135.743900;35.023600,135.745400;35.024500,135.747000"
AUTO_DUMMY_MOVE_METERS_PER_CHECK=0
要模拟单个移动坐标,请删除 AUTO_DUMMY_COORDINATES 并设置
AUTO_DUMMY_LATITUDE, AUTO_DUMMY_LONGITUDE,以及 AUTO_DUMMY_MOVE_METERS_PER_CHECK.
稍后使用真正的NMEA GPS:
AUTO_COORDINATE_SOURCE=gps
GPS_DEVICE=/dev/ttyACM0
仅安全移动测试,无需更换摄像头或farmOS:
./run_auto_collect.sh --dry-run --max-checks 3 --poll-seconds 0.1
静止单坐标试验:
./run_auto_collect.sh --dry-run --max-checks 3 \
--poll-seconds 0.1 --dummy-move-meters 0
只运行一个真正的集合:
./run_auto_collect.sh --max-runs 1
列出最近的工作:
./run_auto_collect.sh --list-jobs
检查一个作业:
./run_auto_collect.sh --status JOB_ID
工作阶段包括:
gps_triggerforeground_data_capturebackground_queuedbackground_assetbackground_postprocesscompleted,completed_with_warnings,或failed
MCP客户端可以通过以下方式获得相同的状态 get_collection_job_status
和 list_collection_jobs.
仪表板
手动启动本地仪表板:
./run_dashboard.sh
打开 http://127.0.0.1:8765。仪表板提供:
- farmOS、MCP工具、YOLO、相机、GPS、Mapbox、Tailscale的启动前准备, 分段、远程LLM审查和作业数据库
- 摄像头和GPS连接状态
- 启动、暂停/恢复和停止控件
- 基于浏览器的YOLO预览
- 实时收集器日志
- 最近的异步收集作业
用户服务 farmos-collector-dashboard.service 在以下位置启动仪表板
靴子。LXDE autostart条目在桌面会话开始后打开Chromium。
可部署副本保存在 deploy/.
现场信息亭启动
对于没有键盘或鼠标的手持式现场设备,请运行一次信息亭设置:
cd /home/cvl/farmos_leaf_mcp_work/farmos_leaf_mcp
chmod +x deploy/setup_field_kiosk.sh
sudo deploy/setup_field_kiosk.sh cvl
sudo reboot
这将启用桌面自动登录 cvl保持仪表板服务启用,
并在启动后以Chromium kiosk/app模式打开UI。数据收集
仍在等待操作员按下 开始 在触摸屏上。
信息亭启动器通过以下方式避免了Chromium钥匙圈解锁提示
--password-store=basic.
安装脚本还应用了稳定的现场屏幕桌面大小:12 pt UI
字体、64像素桌面图标、48像素面板高度和130 DPI。
让仪表板 关机 按钮安全关闭Pi电源,无需 密码提示,安装一次sudoers规则:
cd /home/cvl/farmos_leaf_mcp_work/farmos_leaf_mcp
chmod +x deploy/setup_shutdown_button_sudoers.sh
sudo deploy/setup_shutdown_button_sudoers.sh cvl
使用按钮后,等待屏幕/活动停止,然后关闭 电池开关。
如果小屏幕显示器仍然作为全高清桌面启动,请强制降低启动速度 模式一次:
cd /home/cvl/farmos_leaf_mcp_work/farmos_leaf_mcp
chmod +x deploy/set_field_display_mode.sh
sudo deploy/set_field_display_mode.sh 800x480
sudo reboot
对于3.5英寸MHS显示器, 480x320 可能与面板完全匹配,但是 800x480
通常会让桌面不那么局促。
工具行为注释
classify_camera_and_sync_asset
- 使用YOLO捕获图像并对植物标签/置信度进行分类。
- 如果存在匹配资产:
mode="ask":返回提示mode="overwrite":更新现有资产mode="create_new":创建后缀资产
- 若置信度低于阈值,则将图像发送到远程低置信度审查服务器,并将LLM输出存储在笔记/活动日志中。
collect_data_with_coordinates
端到端流结合资产同步+并行任务:
- 对工厂资产进行分类/追加销售
- 运行几何管道(Mapbox图像->远程分割->轮廓->WKT->更新资源几何)
- 捕获间隔图像,并可选择上传到活动日志
cleanup_asset_activity_log_images
mode="scan":仅报告候选人mode="execute":执行取消链接/删除(带安全确认)- 重复检测仅在YOLO分类为植物的图像上使用pHash。
存储库卫生
Git中有意忽略生成的运行时输出:
captures/mapbox_inputs/received_segmented_mapbox_image/plant_exports/
如果你需要样本工件,请在专用的 examples/ 目录。
安全说明
- 不要向仓库提交真实的凭据、令牌或私有主机IP。
- 保守秘密
.env(Git忽略了)。 - 如果令牌在历史上被提交过,则对其进行轮换。