当前位置: 首页 > news >正文

舍饲环境下母羊产前典型行为识别方法解析【附代码】

✨ 长期致力于舍饲环境、母羊、产前行为、行为识别、福利化研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
如需沟通交流,点击《获取方式》


(1)三轴加速度与红外传感器融合的数据采集装置:

设计可穿戴式项圈,集成MPU6050加速度计(采样率50Hz)和红外反射传感器(检测采食饮水)。装置采用低功耗模式,每15分钟发送一次数据。在内蒙古某舍饲羊场,对20只小尾寒羊母羊进行产前10天连续监测。加速度数据的X、Y、Z三轴分别对应母羊的左右、前后、上下运动。红外传感器安装在食槽上方,当母羊伸头采食时红外反射强度变化超过阈值200。装置续航能力达72小时,数据丢包率低于1.5%。

(2)改进小波阈值去噪与主成分分析特征降维:

针对加速度信号的冲击噪声,提出一种自适应小波阈值函数,阈值随分解层数递减(第一层阈值0.3,第五层0.1)。去噪后信噪比从12dB提升到28dB。提取时域特征(方差、峰度、偏度)和频域特征(主峰频率、频率能量、谱熵),共21维。使用主成分分析将特征压缩到6维,累积方差贡献率92%。实验表明,降维后BP神经网络训练速度提高40%,且识别率从69%提升到79%。

(3)递阶遗传算法优化的BP神经网络分类器:

针对趴卧与站立区分困难,采用K-means先聚类识别趴卧行为(准确率99%),剩余三种行为(站立、行走、刨地)由递阶遗传算法优化结构的BP网络处理。遗传算法同时优化网络层数(2-4层)、节点数(5-30)和学习率(0.01-0.5)。种群规模50,进化30代,适应度函数为验证集识别率。优化后的网络结构为3层(输入6,隐层18,输出3),识别率提升到89.1%。对站立时蹭栏杆等非标准动作,通过增加滑动窗口统计(窗口5秒,步长1秒)判断是否属于稳定站立,误检率从15%降到6%。采食行为由红外传感器识别,再用运动状态修正(如果同时有行走特征则判定为边走边吃,不计入纯采食),修正后识别率提高16%。

import numpy as np import pywt from sklearn.decomposition import PCA from sklearn.cluster import KMeans import genetic_algorithm as ga # placeholder class WaveletDenoiser: def __init__(self, wavelet='db4', level=4): self.wavelet = wavelet self.level = level def denoise(self, signal): coeffs = pywt.wavedec(signal, self.wavelet, level=self.level) sigma = np.median(np.abs(coeffs[-1])) / 0.6745 for i in range(1, len(coeffs)): threshold = sigma * np.sqrt(2*np.log(len(signal))) * (0.9**i) coeffs[i] = pywt.threshold(coeffs[i], threshold, mode='soft') return pywt.waverec(coeffs, self.wavelet) class FeatureExtractor: def __init__(self, window_sec=5, fs=50): self.window = window_sec * fs self.fs = fs def extract(self, acc_x, acc_y, acc_z): windows = np.array([acc_x, acc_y, acc_z]).T features = [] for axis in range(3): seg = windows[:, axis] var = np.var(seg) kurt = scipy.stats.kurtosis(seg) skew = scipy.stats.skew(seg) freq = np.fft.rfft(seg) power = np.abs(freq)**2 dom_freq = np.argmax(power[1:]) * self.fs / len(seg) energy = np.sum(power) features.extend([var, kurt, skew, dom_freq, energy]) return np.array(features) class GeneticBP: def __init__(self, input_dim=6, output_dim=3): self.input_dim = input_dim self.output_dim = output_dim self.population = [] def fitness(self, individual): hidden = individual[0] lr = individual[1] # train BP and return validation accuracy return np.random.random() # placeholder def evolve(self, n_gen=30): # simplified genetic operations self.population = [(np.random.randint(5,30), np.random.uniform(0.01,0.5)) for _ in range(50)] for gen in range(n_gen): scores = [self.fitness(ind) for ind in self.population] # selection, crossover, mutation best_idx = np.argmax(scores) best = self.population[best_idx] print(f'Gen {gen}: best accuracy {scores[best_idx]:.3f}') return best def classify_behavior(acc_features): # Kmeans for lying detection kmeans = KMeans(n_clusters=2, random_state=0).fit(acc_features.reshape(-1,1)) if kmeans.labels_[0] == 0: # assuming cluster0 is lying return 'lying' # otherwise use genetic BP return 'standing_or_walking' def main(): np.random.seed(42) signal = np.sin(2*np.pi*1*np.arange(500)/50) + 0.5*np.random.randn(500) denoiser = WaveletDenoiser() clean = denoiser.denoise(signal) extractor = FeatureExtractor() feat = extractor.extract(clean, clean*0.8, clean*0.5) print(f'Features shape: {feat.shape}') # behavior decision behavior = classify_behavior(feat[:6]) print(f'Classified behavior: {behavior}') ga_bp = GeneticBP() optimal = ga_bp.evolve(5) print(f'Optimal hidden nodes: {optimal[0]}, lr: {optimal[1]:.3f}') if __name__ == '__main__': main()

http://www.jsqmd.com/news/951987/

相关文章:

  • P16353 「Diligent-OI R3 A」说好不哭 题解
  • Moneta Markets亿汇:“量子芯片点燃科技预期”
  • 从Push到Pull:搞懂Prometheus监控数据流的两种姿势,附Shell/Python推送实战
  • 如何免费实现游戏控制器虚拟化:ViGEmBus驱动完整指南
  • 2026云浮市权威认证贵金属回收 TOP5+黄金回收白银回收铂金回收门店地址电话推荐
  • 手把手教你用STM32F072C8T6自制一个带串口的J-Link OB(附全套资料)
  • 高级实时动漫视频超分辨率技术深度解析:Anime4K开源项目架构设计与性能优化实战指南
  • 087、零售货架商品检测:密集排列、遮挡严重、类别极多的 SKU 检测方案
  • 3分钟实现智能图像分层:layerdivider让复杂插画秒变可编辑图层
  • ctf show web入门99
  • 为什么有些影视网站越用越顺手?一次实际体验后的分析
  • Codex中文网 | Codex CLI 中文指南
  • 一件卫衣的诞生:从纱线到成衣的全流程解析
  • MatAnyone:一键实现专业级视频抠图的终极解决方案
  • 086、医疗影像病灶检测:YOLO 在 X 光、CT 切片上的小样本与正负样本不均衡方案
  • 深度解析BestBlogs开源项目:基于GitHub Actions自动化构建个人技术博客与内容聚合平台的实战指南
  • 别再踩坑了!用VMProtect SDK 3.4为你的软件实现一机一码+时间锁(附完整注册机源码)
  • 2026年现阶段,四川优质水果基地如何选?这份深度指南为您解析 - 2026年企业资讯
  • AI如何重塑秋冬服装赛道?实现降本增效新突破
  • 深圳配眼镜推荐指南:3 家硬核之选,少花冤枉钱还能 get 专业配镜 - 配眼镜新资讯
  • 终极指南:用开源神器TCC-G15彻底解决Dell G15散热烦恼
  • Logisim-evolution数字电路设计:从零开始到FPGA实现的完整指南
  • POP3协议抓包实战:从Wireshark过滤器技巧到常见认证失败排查
  • Aegisub字幕编辑高效解决方案:4大使用场景的完整技术指南
  • 085、安防监控行人属性检测:YOLO + 多属性分类 Head 的联合设计
  • 微信小程序二维码生成终极指南:weapp-qrcode高效解决方案
  • 3分钟掌握Windows窗口置顶技巧:告别频繁切换,工作效率提升50%
  • 2026年新消息:洞察国内扭王字块钢模市场格局与核心服务商推荐 - 2026年企业资讯
  • 如何3步制作专业LRC歌词:零基础入门完整指南
  • 终极指南:3分钟用BetterNCM Installer让网易云音乐焕然一新