news 2026/9/28 22:40:49

工业AI检测与协同决策系统:从缺陷检测到闭环执行的架构设计与落地实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工业AI检测与协同决策系统:从缺陷检测到闭环执行的架构设计与落地实践

1. 从“看得见”到“管得住”:工业AI检测到底在解决什么问题

工厂里最不缺的就是摄像头和传感器。一条中等规模的产线,随随便便就能拉出上百路视频流、几千个测点数据。但如果你去问车间主任,这些设备到底帮他解决了什么,十有八九会得到一句:“能看到,但管不过来。”

这就是工业级AI辅助检测与数字化协同决策系统要啃的硬骨头。它做的事情,不是再装几个摄像头、再堆几块大屏,而是把“看见”这件事,变成“判断”和“行动”。传统视觉检测能告诉你“这个焊点有气孔”,但它不会告诉你“这条焊缝的气孔率在过去两小时上升了0.3%,跟换了一批保护气的时间点吻合,建议检查气路”。前者是工具,后者才是系统。

我接触过不少制造企业的数字化项目,一个很普遍的误区是:把AI检测当成一个“高级质检员”来用。买几台智能相机,部署一套缺陷识别算法,产线末端把不良品挑出来,项目就算交付了。这种做法的天花板非常低,因为漏检率和过杀率永远在博弈,算法调来调去,最后变成一个“勉强能用”的状态。真正让工厂觉得“管得住”的,是检测结果能自动触发后续动作——比如连续三件同类型缺陷,产线自动降速;比如某台设备的缺陷贡献率超过阈值,工单自动派给设备科;比如同一批次原料对应的成品缺陷率偏高,采购部门收到预警。

这套系统的核心价值,在于把检测、分析、决策、执行四个环节串成闭环。检测是入口,分析是大脑,决策是神经中枢,执行是手脚。缺了任何一个,都只是半成品。

适合谁来参考这篇文章?如果你是工厂的工艺工程师、设备主管、数字化项目负责人,或者正在做智能制造相关的方案设计,那接下来的内容应该能帮你少走不少弯路。如果你只是对AI在工业里的应用感兴趣,我也会尽量用生活化的例子把原理讲清楚。

2. 系统整体架构:为什么不能只做“AI质检”

2.1 三层架构的取舍逻辑

工业级系统和实验室Demo最大的区别,在于稳定性优先于先进性。我在方案设计阶段踩过最大的坑,就是一开始追求“端到端大模型”,想把图像采集、缺陷分类、根因分析全部塞进一个模型里。结果发现,产线环境的光照变化、粉尘干扰、产品换型,任何一个变量都能让模型表现断崖式下跌。

后来调整成三层架构,才真正跑通:

第一层:边缘感知层。这一层的关键词是“轻量”和“实时”。工业相机、线扫相机、3D轮廓仪采集原始数据,在边缘侧完成预处理和初步推理。为什么不在云端做?因为产线节拍不等人。一个冲压件从模具出来到下一道工序,可能只有1.5秒。如果把图像传到云端推理再传回来,黄瓜菜都凉了。边缘侧通常用轻量级模型,比如YOLO系列或者MobileNet,配合TensorRT或者OpenVINO做推理加速,单帧处理时间控制在30毫秒以内。

第二层:协同决策层。这一层是整个系统的“大脑”,也是标题里“协同决策”四个字的落脚点。它接收来自边缘侧的检测结果,同时接入MES的生产工单、SCADA的设备状态、WMS的物料批次信息,做多源数据融合。举个例子:边缘侧报告“第3工位检测到划痕缺陷”,协同决策层不会立刻报警,而是先查一下这个工位的设备参数——如果发现是换刀后第5件产品,而且划痕方向与刀具进给方向一致,那大概率是刀具安装偏差,直接推送“检查刀具装夹”的工单,而不是让质检员去复判。

第三层:应用交互层。这一层面向不同角色提供不同视图。车间主任看的是实时良率看板和异常事件流;工艺工程师看的是缺陷分布热力图和参数相关性分析;设备科看的是设备健康度评分和维保建议;管理层看的是周报和趋势预测。同一个数据源,不同的人看到不同的“故事”。

2.2 为什么选择“规则引擎+机器学习”的混合决策

纯规则引擎太死板,纯机器学习又太“黑盒”。工业场景里,很多决策逻辑是明确的工艺知识,比如“连续三件缺陷必须停线”,这种用规则引擎实现最可靠。但有些场景需要模型来判断,比如“根据过去72小时的设备振动频谱和缺陷率,预测未来8小时哪台设备可能出问题”。

我的做法是:确定性逻辑走规则引擎,概率性判断走机器学习模型,两者通过决策表融合。决策表的好处是透明,工艺工程师能看懂,也能自己调整阈值。比如下面这个简化版的决策表:

条件动作优先级
连续3件同类缺陷停线并通知班长高
单件缺陷但尺寸偏差>0.5mm标记并推送复检中
缺陷率>2%且设备振动异常推送设备检修工单高
缺陷率>2%但设备参数正常推送工艺参数复核中
单件缺陷且尺寸偏差<0.1mm记录并继续低

这个表看起来简单,但实际部署时,每一条规则的阈值都需要根据产线实际情况调整。比如“连续3件”这个数字,高速冲压线可能设成5件,因为节拍太快,3件可能只是随机波动;而低速装配线设成2件就够了。

2.3 数据流设计中的关键细节

数据流设计有一个容易被忽视的点:时间戳对齐。边缘侧的检测结果、SCADA的设备数据、MES的工单信息,三者的时间基准可能不一致。我遇到过最离谱的情况是,SCADA服务器时间比边缘侧慢了47秒,导致缺陷报警关联到了错误的设备参数上,排查了整整两天才发现是NTP服务没配好。

所以,系统上线前一定要做时间同步。所有节点统一走NTP,边缘侧做本地缓存,网络恢复后按时间戳补传。另外,数据流里要保留原始数据至少30天,因为很多根因分析需要回溯。比如某批产品在客户端出现批量问题,你需要调出当时的生产数据做对比分析。

3. 核心功能模块拆解:从检测到决策的完整链路

3.1 缺陷检测模块:工业级AI和实验室AI的差距在哪里

实验室里跑一个缺陷检测模型,准确率95%就能发论文了。但在产线上,95%的准确率意味着每100件产品有5件误判,一天下来就是几百件,质检员会直接找你拼命。

工业级检测模块的核心指标不是准确率,而是过杀率和漏检率的平衡。过杀率太高,良品被误判为不良,浪费成本;漏检率太高,不良品流到客户端,损失更大。这两个指标是跷跷板,需要根据产品特性和客户要求来调。

我的经验是:先定漏检率上限,再压过杀率。比如汽车安全件,漏检率必须控制在0.1%以下,那过杀率可能要到3%甚至5%,这是可以接受的。而外观件,漏检率可以放宽到1%,过杀率压到0.5%以内。

具体实现上,有几个关键点:

数据增强要贴近真实产线。实验室里用旋转、翻转、加噪声来扩充数据集,但产线上的变化远不止这些。光照渐变、镜头污染、产品表面反光、传送带抖动,这些都需要在训练数据里体现。我的做法是:在产线上连续采集一周的数据,涵盖早中晚不同时段、不同班次、不同环境光,然后从中挑选典型样本做标注。

模型更新要支持增量学习。产品换型、新缺陷类型出现,都需要模型快速适应。全量重训太慢,通常采用增量学习或者小样本微调。这里有个坑:增量学习容易导致“灾难性遗忘”,新模型对旧缺陷类型的识别能力下降。解决办法是保留一部分旧数据做回放训练,或者用弹性权重固化(EWC)之类的算法。

推理速度要留余量。产线节拍是1.5秒,你的推理时间不能超过1秒,因为还要留时间给后续的决策和执行。如果模型太大跑不动,可以考虑模型剪枝、量化,或者用知识蒸馏把小模型训出来。

3.2 协同决策模块:让数据开口说话

检测模块告诉你“发生了什么”,决策模块要回答“为什么”和“怎么办”。

根因分析是决策模块的核心能力。我常用的方法是多维度下钻:按时间维度看缺陷率趋势,按设备维度看哪台设备贡献最多缺陷,按班次维度看是否某个班组操作差异,按物料批次维度看是否某批原料有问题。

举个例子:某注塑件出现批量缩痕缺陷。按时间看,缺陷集中在下午2点到4点;按设备看,集中在3号注塑机;按班次看,集中在B班;按物料看,集中在某供应商的PP料。交叉分析后发现,B班在下午2点换料后,3号机的背压参数没有相应调整,导致缩痕。这就是一个典型的协同决策场景——如果只看检测结果,你只知道“有缩痕”;只有把设备、班次、物料数据串起来,才能找到根因。

决策推荐要给出可执行的建议,而不是一堆图表。我见过很多系统,大屏做得花里胡哨,但车间主任看完不知道该干什么。好的决策推荐应该是:“建议将3号机背压从12MPa调整到15MPa,调整后预计缩痕率从3.2%降到0.8%。”有具体参数、有预期效果,操作工才愿意执行。

3.3 数字化协同模块:打破部门墙

“协同”两个字说起来容易,做起来难。质检部发现缺陷,设备科觉得是工艺问题,工艺科觉得是来料问题,采购部觉得是供应商问题——最后谁都不改。

数字化协同模块要做的,是用数据定责,用流程闭环。具体来说:

缺陷工单自动流转。检测到缺陷后,系统根据缺陷类型和根因分析结果,自动生成工单并派发给对应部门。比如“刀具磨损导致的尺寸偏差”派给设备科,“来料划痕”派给采购部,“参数设置不当”派给工艺科。工单里附带检测图像、设备参数、历史数据,接单的人不用再去问“怎么回事”。

处理结果强制反馈。工单处理完,必须填写处理措施和效果验证。如果处理后同类缺陷再次出现,系统会自动升级工单优先级,并通知上级主管。这个机制能有效防止“敷衍了事”。

知识库沉淀。每次根因分析和处理措施都自动存入知识库,下次遇到类似缺陷,系统会推荐历史解决方案。时间长了,这个知识库就是工厂的“老师傅经验”。

4. 实操部署:从零搭建一套可落地的系统

4.1 硬件选型与产线改造

硬件选型的第一原则是匹配产线节拍和精度要求。不是越贵越好,而是够用就行。

相机选型:如果检测对象是静态或者低速运动(比如装配后的外观检查),普通面阵相机就够了,200万到500万像素,帧率30fps左右。如果是高速产线(比如冲压、卷绕),需要用线扫相机,分辨率根据最小缺陷尺寸来定。举个例子:最小缺陷0.1mm,视野100mm,那相机分辨率至少需要100/0.1=1000像素,考虑余量选2000像素的线扫相机。

光源选型:工业检测里,光源的重要性不亚于相机。背光适合尺寸测量,环形光适合表面缺陷,同轴光适合反光表面。我踩过的坑是:在金属件检测上用普通环形光,结果反光严重,图像一片白。后来换成圆顶光(Dome Light),问题才解决。光源选型没有万能方案,最好让供应商拿样品实测。

边缘计算设备:工控机或者边缘服务器,关键看算力和接口。算力方面,如果跑YOLOv5s级别的模型,一块中端GPU(比如RTX 3060)就够了。接口方面,要确保有足够的网口接相机,有GPIO接产线PLC做触发和结果输出。

产线改造注意事项:安装位置要避开振动源和热源,相机支架要足够刚性,否则图像会模糊。触发信号最好从PLC取,不要用软件触发,因为软件触发有延迟和抖动。另外,要预留人工复检工位,系统上线初期,AI判断结果需要人工确认,等稳定运行一段时间后再逐步减少人工干预。

4.2 数据采集与标注的实操细节

数据采集阶段,宁滥勿缺。产线试运行期间,尽量多采数据,不同班次、不同光照、不同产品型号都要覆盖。我通常建议至少采集一周的数据,每天至少覆盖早中晚三个时段。

标注阶段,一致性比数量更重要。同一个缺陷,不同标注员的判断可能不一样。解决办法是:先制定标注规范,明确每种缺陷的定义和边界,然后让所有标注员标同一批样本,对比结果,统一认识。标注规范要配图说明,比如“划痕”和“擦伤”的区别,“气孔”和“缩孔”的区别,都要有典型图像。

标注工具方面,LabelImg、CVAT、Labelme都可以用。如果团队有开发能力,可以基于Labelme做二次开发,集成到自己的数据管理平台里。标注数据要按“训练集:验证集:测试集=7:2:1”划分,而且划分时要保证每个集合里都有各种缺陷类型,不能随机分。

4.3 模型训练与调优的实战经验

模型选型上,不要盲目追新。YOLOv5、YOLOv8在工业缺陷检测里已经足够成熟,社区资源多,遇到问题好查。如果缺陷类型简单、背景干净,甚至可以用传统的图像处理算法(比如边缘检测+形态学操作),速度更快,可解释性更强。

训练时的关键参数:

  • 输入尺寸:根据缺陷大小来定。如果缺陷只占图像的很小一部分,输入尺寸要相应放大,否则缺陷特征会被下采样丢失。比如512x512的输入,如果缺陷只有10x10像素,经过5次下采样后就剩不到1个像素了。
  • 学习率:工业数据集通常不大,学习率从0.001开始,配合余弦退火调度。如果loss震荡,降到0.0001。
  • 数据增强:除了常规的翻转、旋转,还要加亮度调整、对比度调整、高斯噪声、运动模糊。这些都能模拟产线环境变化。
  • 正负样本比例:缺陷样本通常远少于良品样本,需要做重采样或者用Focal Loss来平衡。

调优时,看混淆矩阵比看准确率有用。混淆矩阵能告诉你哪类缺陷容易被误判成哪类,针对性地补充数据或者调整分类阈值。

4.4 系统集成与上线调试

系统集成最大的坑是接口不兼容。相机的SDK、PLC的通信协议、MES的API,每家都不一样。我的做法是:在边缘侧做一个“协议转换层”,把各种设备的接口统一成内部标准格式(比如JSON over MQTT),上层应用只跟标准格式打交道。

上线调试要分阶段:

第一阶段:影子模式。系统只检测、只记录,不控制产线。人工复检结果和AI结果对比,统计漏检率和过杀率。这个阶段通常跑1-2周,直到指标稳定。

第二阶段:建议模式。系统给出判断和建议,但由人工决定是否执行。这个阶段能发现很多“AI觉得对但人不认同”的情况,是优化决策规则的好机会。

第三阶段:自动模式。系统直接控制产线动作,比如自动剔除不良品、自动停线。这个阶段一定要设置“一键切换人工”的按钮,万一系统抽风,操作工能立刻接管。

5. 常见问题与排查技巧实录

5.1 检测精度不达标怎么排查

这是被问得最多的问题。我的排查顺序是:先看数据,再看模型,最后看硬件。

数据层面:训练集里有没有覆盖当前产线的实际工况?如果训练时用的是A产线的数据,部署到B产线,光照和背景都不一样,精度肯定掉。解决办法是采集B产线的数据做微调。

模型层面:混淆矩阵里哪类缺陷误判最多?如果是小目标缺陷漏检,检查输入尺寸是不是太小。如果是相似缺陷混淆,检查标注规范是不是清晰。

硬件层面:相机镜头有没有脏?光源亮度有没有衰减?触发信号有没有抖动?这些问题看起来低级,但实际排查中占比很高。我遇到过镜头上一滴油污导致整批产品误判的情况,擦了镜头就好了。

5.2 系统误报太多怎么处理

误报多的核心原因是模型对“正常变化”不够鲁棒。产线上的正常变化包括:产品表面纹理差异、环境光缓慢变化、传送带轻微跑偏。

解决办法有几个:

  • 增加负样本:把误报的样本收集起来,标成负样本,加入训练集重新训练。
  • 设置置信度阈值:模型输出置信度低于某个值的,不报警,转人工复检。阈值根据过杀率和漏检率的平衡来定。
  • 引入时序滤波:单帧误报可以通过多帧投票来过滤。比如连续5帧里至少3帧判断为缺陷,才最终报警。

5.3 产线换型后模型失效怎么办

换型是工业AI检测的“老大难”。新产品、新模具、新颜色,都可能让旧模型失效。

我的经验是:换型前预留模型适配时间。新产品试产阶段,就采集数据、微调模型。如果换型频繁(比如一天换好几次),可以考虑多模型切换——每个产品型号对应一个模型,换型时自动切换。如果换型太频繁导致模型数量爆炸,可以用元学习或者域适应的方法,让模型快速适应新任务。

5.4 常见问题速查表

问题现象可能原因排查方向解决措施
漏检率突然升高光照变化、镜头污染检查光源和镜头清洁镜头、调整光源
过杀率突然升高模型阈值漂移、产品换型检查模型版本和产品型号重新校准阈值、切换模型
推理速度变慢边缘设备负载高、模型太大查看CPU/GPU占用优化模型、升级硬件
工单不流转接口超时、权限配置错误检查网络和日志修复接口、调整权限
数据时间戳错乱NTP未同步检查各节点时间统一配置NTP
模型更新后旧缺陷漏检灾难性遗忘对比新旧模型混淆矩阵保留旧数据回放训练

5.5 独家避坑技巧

技巧一:在产线上放一个“标准缺陷样本”。每天开班前,用标准样本跑一遍系统,确认检测结果一致。这能快速发现相机、光源、模型的异常。

技巧二:保留“人工复检”通道至少三个月。不要一上线就完全依赖AI,人工复检能帮你发现系统的盲区。

技巧三:决策规则的阈值要写成配置文件。不要硬编码在代码里,工艺工程师应该能自己调整。我见过一个项目,改一个阈值要走代码发布流程,等一周才能上线,产线早就等不及了。

技巧四:日志要记录“为什么”。系统做出每个决策时,把依据的规则、数据、模型置信度都记下来。出问题时,翻日志能快速定位。

技巧五:和产线操作工搞好关系。他们是最了解产线的人,系统好不好用,他们最有发言权。我很多优化灵感都来自操作工的吐槽。

6. 效果评估与持续优化

6.1 怎么衡量系统到底有没有用

不要只看“检测准确率”这一个指标。我通常从四个维度评估:

质量维度:漏检率、过杀率、客户投诉率。这是最直接的指标。

效率维度:质检员人数、复检时间、工单处理时长。系统上线后,质检员应该从“全检”变成“抽检+复检”,人力释放出来做更有价值的事。

成本维度:不良品报废成本、停线时间、客户索赔。这些是财务指标,管理层最关心。

管理维度:根因分析覆盖率、工单闭环率、知识库沉淀数量。这些指标反映系统的“协同”能力。

6.2 持续优化的三个方向

数据闭环:系统运行中产生的误报、漏报、人工复检结果,都要自动回流到训练集。每周做一次增量训练,每月做一次全量评估。

规则迭代:决策规则不是一成不变的。随着对产线理解的深入,工艺工程师会提出新的规则。系统要支持规则的快速配置和测试。

模型进化:关注新的检测算法和模型架构,但不要盲目追新。新模型上线前,一定要在影子模式下跑够时间,确认指标不降级。

6.3 一个真实的优化案例

某汽车零部件厂,系统上线初期漏检率0.8%,过杀率5%。过杀率太高,质检员抱怨不断。排查发现,模型对“轻微划痕”和“正常纹理”区分不清。解决办法是:收集了2000张“正常纹理”样本加入训练集,同时把划痕检测的置信度阈值从0.5提高到0.7。调整后,过杀率降到1.2%,漏检率0.9%,质检员接受度大幅提升。

这个案例说明,工业AI检测的优化,很多时候不是模型架构的问题,而是数据和阈值的问题。不要一上来就想着换模型,先把数据和规则调好。

7. 这套系统还能怎么扩展

7.1 从单点检测到全流程质量追溯

现在的系统主要聚焦在产线末端的成品检测。下一步可以往前延伸,在关键工序设置检测点,实现全流程质量追溯。比如:来料检验、首件检验、过程检验、成品检验,每个环节的数据都串起来。一旦客户端出现质量问题,能快速定位到是哪批原料、哪台设备、哪个班次、哪个参数导致的。

7.2 从缺陷检测到预测性维护

检测数据不仅能判断产品好坏,还能反映设备状态。比如:刀具磨损会导致尺寸逐渐偏大,模具磨损会导致毛刺逐渐增多。把这些趋势数据积累起来,结合设备振动、温度、电流等信号,可以做预测性维护。在设备真正故障前,提前更换刀具或模具,避免非计划停线。

7.3 从单厂部署到多厂协同

如果企业在多个地方有工厂,可以把各厂的检测数据和决策经验汇总到集团层面,做横向对比和最佳实践推广。比如:A厂的某类缺陷率明显低于B厂,分析发现A厂的某个工艺参数设置更优,就可以推广到B厂。这种跨厂协同,能放大数字化系统的价值。

7.4 和AI Agent的结合

最近AI Agent很火,我觉得在工业场景里也有想象空间。比如:一个“质检Agent”可以自动分析缺陷、生成工单、跟踪处理进度、验证效果,全程不需要人干预。一个“工艺Agent”可以自动分析参数相关性,推荐工艺优化方案。当然,工业场景对可靠性要求极高,Agent的决策权限要逐步放开,先从“建议”开始,验证可靠后再过渡到“自动执行”。

我个人在实际操作中的体会是:工业AI检测与协同决策系统,技术只是手段,真正的难点在于对产线工艺的理解和跨部门的协同。一个不懂工艺的算法工程师,做不出好用的检测系统;一个不懂协同的系统架构师,做不出“管得住”的决策系统。如果你正在做类似的项目,建议多下车间、多和操作工聊天、多和工艺工程师泡在一起。数据在电脑里,但答案在产线上。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 22:40:36

Windows 下编译 spdlog:CMake 配置、静态库集成与踩坑实录

如果你之前在 Linux 上用过 spdlog&#xff0c;觉得它“下载即用、include 就能跑”&#xff0c;那到 Windows 上第一次编译可能就会被 CMake 的生成器选项、运行时库、Debug/Release 配置啪啪打脸。这个库 2026 年在 C 项目里依然是日志方案的第一梯队&#xff1a;单头文件、高…

作者头像 李华
网站建设 2026/9/28 22:40:26

深度学习图像超分辨率重建:原理、实操与落地避坑全指南

简介&#xff1a;面向深度学习入门者与毕业设计人员&#xff0c;这份基于深度学习的图像超分辨率重建项目&#xff0c;完整呈现了从数据准备、模型训练到效果对比的实践流程&#xff0c;可直接用于课程设计或算法验证。项目围绕卷积神经网络、生成对抗网络与残差网络展开&#…

作者头像 李华
网站建设 2026/9/28 22:38:59

医疗命名实体识别小样本实战:基于pycrfsuite的CRF特征工程与避坑

简介&#xff1a;这是天池瑞金医院MMC人工智能辅助构建知识图谱大赛初赛的参赛作品&#xff0c;聚焦糖尿病相关医疗命名实体识别&#xff08;NER&#xff09;&#xff0c;基于pycrfsuite实现。整套资料面向参加同类竞赛的算法学习者与医疗NLP入门者&#xff0c;可直接用于复现赛…

作者头像 李华
网站建设 2026/9/28 22:36:53

模型优化器实战:量化、算子融合与剪枝加速推理

1. 模型优化器到底在解决什么问题第一次接触 Model-Optimizer 这个概念&#xff0c;是在一个推荐系统的排序模型上。当时线上推理延迟卡在 85ms 下不去&#xff0c;GPU 利用率却只有 30% 出头&#xff0c;显存倒是先爆了。排查了一圈发现&#xff0c;问题不在模型结构&#xff…

作者头像 李华
网站建设 2026/9/28 22:34:37

OSI七层模型实战拆解:用分层思维快速定位网络故障

1. 为什么搞懂OSI模型比单纯记住七层名字更重要很多人在学习网络基础时&#xff0c;第一步就是背OSI七层模型的名字&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。背倒是都背下来了&#xff0c;可一旦遇到实际问题——比如网页打不开、视频连不上、…

作者头像 李华
网站建设 2026/9/28 22:34:36

滚轮缩放图片:基于transform和JavaScript的图片预览实现

最近好几个前端新手问我同一个需求&#xff1a;做一个图片预览功能&#xff0c;鼠标滚轮一滚&#xff0c;图片就能变大变小。很多人第一反应是给图片加一个 CSS3 的 zoom&#xff0c;结果要么在 Firefox 上没反应&#xff0c;要么缩放之后旁边的布局被挤得乱七八糟。如果你也正…

作者头像 李华