AI+IoT智慧渔业:水质监测+鱼群行为分析+投喂优化

AI+IoT智慧渔业:水质监测+鱼群行为分析+投喂优化

AI+IoT智慧渔业:水质监测+鱼群行为分析+投喂优化

引言

中国水产养殖产量占全球60%以上,但传统养殖模式面临三大挑战:水质突变导致大面积死亡、饲料浪费率高达30%、病害发现滞后造成巨额损失。一个100亩的鱼塘,一次缺氧事故可能损失数十万元。

AI+IoT智慧渔业通过水质传感器网络实时监测溶解氧、pH、氨氮等关键指标,水下摄像头结合AI分析鱼群行为,智能投喂系统根据鱼群活跃度和水质状态精准控制投喂量,实现"养鱼先养水"的科学养殖。

场景痛点

痛点传统方式AI+IoT方案
缺氧翻塘巡塘发现,已晚溶解氧实时监测,自动增氧
投喂浪费凭经验撒料AI按需投喂,节省30%饲料
病害发现鱼死了才知道鱼群行为异常预警
水质突变每天测一次5分钟采集一次,即时报警
人工成本3人管100亩1人管300亩

系统架构设计

┌─────────────────────────────────────────────────────┐ │ 智慧渔业云平台 │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 水质监控 │ │ 投喂决策 │ │ 养殖分析 │ │ │ │ 实时看板 │ │ AI引擎 │ │ 生长模型 │ │ │ └──────────┘ └──────────┘ └──────────┘ │ └─────────────────┬───────────────────────────────────┘ │ MQTT ┌─────────────────┴───────────────────────────────────┐ │ 塘口控制柜(边缘网关) │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 数据采集 │ │ 鱼群分析 │ │ 设备控制 │ │ │ │ PLC通信 │ │ 视频AI │ │ 继电器 │ │ │ └──────────┘ └──────────┘ └──────────┘ │ └──┬─────────┬──────────┬──────────┬──────────────────┘ │ │ │ │ ┌──┴───┐ ┌──┴───┐ ┌────┴────┐ ┌──┴──────┐ │水质传感│ │水下摄像│ │投饵机 │ │增氧机 │ │多参数 │ │鱼群行为│ │精准投喂 │ │智能启停 │ └──────┘ └──────┘ └────────┘ └────────┘

硬件选型与BOM(单塘口)

组件型号单价(元)数量说明
控制柜PLC+触摸屏20001核心控制
溶解氧传感器DOG-209FY80010-20mg/L
pH传感器PHG-20950010-14pH
氨氮传感器AD08120010-100mg/L
水温传感器PT100502冗余
浊度传感器TSW-30B30010-4000NTU
水下摄像头1080P防水3501鱼群监测
投饵机智能投饵机30001变频控制
增氧机3kW叶轮式15002含变频器
4G网关DTU3001数据上传
单塘口总计~10,300

AI算法详解

1. 鱼群行为分析

importcv2importnumpyasnpfromultralyticsimportYOLOclassFishBehaviorAnalyzer:"""鱼群行为分析"""BEHAVIOR_STATES={'normal':'正常游动','feeding':'抢食','surfacing':'浮头(缺氧)','schooling':'聚集(应激)','scattered':'分散(异常)'}def__init__(self,model_path='fish_detect.pt'):self.model=YOLO(model_path)self.history=[]defanalyze_frame(self,frame):"""分析单帧图像"""results=self.model(frame,conf=0.5)detections=[]forrinresults[0].boxes:detections.append({'bbox':r.xyxy[0].tolist(),'confidence':float(r.conf),'class':int(r.cls)})# 计算鱼群分布特征features=self._compute_school_features(detections,frame.shape)# 判断行为状态behavior=self._classify_behavior(features)self.history.append({'features':features,'behavior':behavior})return{'fish_count':len(detections),'behavior':behavior,'features':features,'detections':detections}def_compute_school_features(self,detections,frame_shape):"""计算鱼群特征"""ifnotdetections:return{'density':0,'spread':0,'vertical_position':0,'movement_intensity':0}centers=[]fordindetections:bbox=d['bbox']cx=(bbox[0]+bbox[2])/2cy=(bbox[1]+bbox[3])/2centers.append([cx,cy])centers=np.array(centers)h,w=frame_shape[:2]# 密度(归一化)density=len(detections)/(w*h)*10000# 分散度iflen(centers)>1:spread=np.std(centers,axis=0).mean()else:spread=0# 垂直位置(越靠近水面y越小)avg_y=np.mean(centers[:,1])vertical_position=1-avg_y/h# 0=底部,1=水面# 运动强度(与上一帧对比)movement_intensity=0iflen(self.history)>0:prev_features=self.history[-1]['features']movement_intensity=abs(density-prev_features.get('density',0))return{'density':round(density,2),'spread':round(spread,2),'vertical_position':round(vertical_position,3),'movement_intensity':round(movement_intensity,2)}def_classify_behavior(self,features):"""行为状态分类"""# 浮头:鱼群集中在水面iffeatures['vertical_position']>0.8andfeatures['density']>5:return'surfacing'# 聚集:密度高但分散度低iffeatures['density']>10andfeatures['spread']<50:return'schooling'# 抢食:运动强度高iffeatures['movement_intensity']>5:return'feeding'# 分散:分散度异常高iffeatures['spread']>200:return'scattered'return'normal'defget_alert(self,behavior):"""根据行为生成告警"""alerts={'surfacing':{'level':'CRITICAL','message':'鱼群浮头,疑似缺氧!请立即开启增氧机','action':'enable_aerator'},'schooling':{'level':'WARNING','message':'鱼群异常聚集,可能有应激反应','action':'check_water_quality'},'scattered':{'level':'WARNING','message':'鱼群分散异常,检查是否有病害','action':'check_health'}}returnalerts.get(behavior)

2. 智能投喂决策

importnumpyasnpclassSmartFeeder:"""智能投喂决策系统"""def__init__(self,fish_species='carp',stock_density=1000):""" fish_species: 养殖品种 stock_density: 存塘密度(尾/亩) """self.fish_species=fish_species self.stock_density=stock_density# 基础投喂率(体重百分比)self.base_feeding_rate={'carp':0.03,# 鲤鱼'tilapia':0.04,# 罗非鱼'shrimp':0.05,# 对虾'bass':0.035,# 鲈鱼}# 水温修正系数self.temp_factor={(0,15):0.3,# 低温,少量投喂(15,20):0.7,(20,28):1.0,# 最适温度(28,32):0.8,(32,40):0.2# 高温,减少投喂}self.feeding_history=[]defcalculate_feeding_amount(self,water_quality,fish_behavior,avg_weight_kg,acreage):""" 计算投喂量 water_quality: {'temperature': 25, 'do': 6.5, 'ph': 7.2, 'nh3n': 0.5} fish_behavior: 'normal'|'feeding'|'surfacing'|'schooling'|'scattered' avg_weight_kg: 平均鱼体重(kg) acreage: 面积(亩) """# 基础投喂量base_rate=self.base_feeding_rate.get(self.fish_species,0.03)total_weight=avg_weight_kg*self.stock_density*acreage base_amount=total_weight*base_rate# 水温修正temp=water_quality['temperature']temp_mult=1.0for(t_low,t_high),factorinself.temp_factor.items():ift_low<=temp<t_high:temp_mult=factorbreak# 溶解氧修正do=water_quality['do']ifdo<3:do_mult=0.0# 严重缺氧,停止投喂elifdo<5:do_mult=0.5else:do_mult=1.0# 行为修正behavior_mult={'normal':1.0,'feeding':1.2,# 抢食,增加投喂'surfacing':0.0,# 浮头,停止投喂'schooling':0.5,# 聚集,减少投喂'scattered':0.3# 分散,大幅减少}.get(fish_behavior,1.0)# 最终投喂量final_amount=base_amount*temp_mult*do_mult*behavior_mult# 投喂策略iffinal_amount>0:# 分多次投喂,每次不超过5%feed_times=max(2,int(final_amount/(total_weight*0.05))+1)amount_per_feed=final_amount/feed_timeselse:feed_times=0amount_per_feed=0result={'total_amount_kg':round(final_amount,2),'feed_times':feed_times,'amount_per_feed_kg':round(amount_per_feed,2),'factors':{'base_rate':base_rate,'temp_mult':temp_mult,'do_mult':do_mult,'behavior_mult':behavior_mult},'warnings':[]}# 告警ifdo<3:result['warnings'].append('严重缺氧,停止投喂并开启增氧机')iftemp>32:result['warnings'].append('水温过高,减少投喂')iffish_behavior=='surfacing':result['warnings'].append('鱼群浮头,停止投喂')self.feeding_history.append(result)returnresult

3. 增氧机智能控制

importtimeclassAeratorController:"""增氧机智能控制"""def__init__(self,do_threshold_low=4.0,do_threshold_high=7.0):self.do_threshold_low=do_threshold_low self.do_threshold_high=do_threshold_high self.is_running=Falseself.last_toggle_time=0self.min_run_time=600# 最少运行10分钟defupdate(self,do_level,time_of_day=None):""" 根据溶解氧控制增氧机 do_level: 当前溶解氧(mg/L) """now=time.time()result={'action':'none','reason':''}# 凌晨2-6点是缺氧高危期,降低阈值iftime_of_dayand2<=time_of_day<=6:threshold=self.do_threshold_low+1.0else:threshold=self.do_threshold_low# 防止频繁切换ifnow-self.last_toggle_time<self.min_run_time:returnresultifdo_level<thresholdandnotself.is_running:self.is_running=Trueself.last_toggle_time=now result={'action':'start','reason':f'溶解氧{do_level:.1f}mg/L低于阈值{threshold}mg/L'}elifdo_level>self.do_threshold_highandself.is_running:self.is_running=Falseself.last_toggle_time=now result={'action':'stop','reason':f'溶解氧{do_level:.1f}mg/L已恢复'}returnresult

部署实战

传感器安装示意

塘口俯视图 ┌─────────────────┐ │ │ │ ┌─────┐ │ ← 增氧机1 │ │控制柜│ │ │ └─────┘ │ │ │ │ ⊙ 水质传感器 │ ← 中间位置,水下50cm │ │ │ 📷 水下摄像头 │ ← 投饵区附近 │ │ │ ◎ 投饵机 │ ← 中心位置 │ │ │ ┌─────┐ │ ← 增氧机2 │ │ │ │ │ └─────┘ │ └─────────────────┘

成本与ROI分析

项目传统方式(年/亩)AI+IoT方式(年/亩)节省
饲料4000元2800元30%
电费600元400元33%
人工800元300元62%
损失500元(均摊)50元90%
合计5900元3550元40%

设备投入约100元/亩,当年收回成本

未来展望

  1. 无人投料船:自主巡航投喂
  2. 水质预测模型:提前24小时预警水质突变
  3. 病害AI诊断:拍照识别鱼病
  4. 区块链溯源:从塘口到餐桌全程追溯
  5. 碳汇养殖:量化养殖碳排放

总结

AI+IoT智慧渔业以1万元/塘口的投入,实现40%的综合成本节省。核心价值在于:溶解氧实时监测避免翻塘损失、AI投喂节省30%饲料、鱼群行为分析实现病害早发现。对于100亩以上的养殖户,这是当年就能回本的高价值投资。