自动化工业质检最佳实践

PolarDB for AI工业质检方案集成了深度学习模型与数据库能力,用于构建自动化质检解决方案。该方案可用于构建并部署识别工件结构缺陷(如缺孔、开裂)的智能服务,实现对产线图像的实时分析与预警。该方案已在汽车制造领域完成验证,可降低超过90%的人工复检工作量。

实践效果

合格工件

image

缺陷工件

image

模型报警+辅助定位

image

功能简介

工作流程

PolarDB for AI工业质检方案提供了一个从数据处理、模型训练到部署应用的全链路解决方案。其核心工作流程包括以下几个阶段:

  1. 图像预处理:调用图像分割模型,从原始产线图片中自动裁剪出工件的主体部分,排除背景干扰。

  2. 模板标注:在标注平台(Label Studio)中,对一张标准工件的裁剪图进行标注,定义所有关键检测点(如孔洞)的位置,形成“标准模板”。

  3. 数据集生成:利用“标准模板”,从大量工件图片中自动裁剪出所有待检测的孔洞区域,形成模型训练所需的图像数据集。

  4. 模型训练:上传生成的孔洞数据集并进行二次标注,然后使用这些数据训练目标检测模型。

  5. 服务部署与调用:将训练好的模型部署为在线服务。业务系统通过调用API接口,传入产线实时拍摄的工件图片,获得包含缺陷定位的质检结果。

功能优势

  • 精准高效:针对预设的关键区域实现像素级缺陷识别(如缺孔、开裂),准确率高,适用于对结构一致性要求严苛的场景。

  • 全流程自动化:将图像处理、数据标注、模型训练和推理集成在数据库内,替代传统人工复检,消除主观误差,提升质检流程的标准化水平。

  • 快速部署:提供标准化的流程和脚本,支持与不同型号产品的快速适配,可迅速集成至现有产线。

  • 降本增效:已在汽车制造等领域成功落地,可降低超过90%的人工审核工作量,显著节约长期质量管控成本。

适用范围

使用本功能前,需满足以下条件:

  • 添加至少一个GPU规格的AI节点,并设置AI节点的连接数据库账号:开启PolarDB for AI功能

    说明
    • 建议选择16125 GB+ 一张GU100(polar.mysql.x8.2xlarge.gpu)规格的AI节点。

    • 若您在购买集群时已添加AI节点,则可以直接为AI节点设置连接数据库的账号。

    • AI节点的连接数据库账号需具有读写权限,以确保能够顺利读取和写入目标数据库。

  • 使用集群地址连接PolarDB集群:登录PolarDB for AI

步骤一:图像预处理与分割阈值调优

通过图像分割模型,将工件从原始图像中分离出来。通过测试找到最佳的threshold(置信度阈值),以确保后续图像能被准确、稳定地裁剪。

说明

图像分割模型目前处于灰度阶段。如您有相关需求,请提交工单与我们联系,以便为您提供相关模型服务与添加模型访问白名单。

  1. 准备测试脚本:将以下Python脚本保存为01_threshold_test.py。该脚本读取本地图片,调用已部署的分割模型,并保存结果图,用于评估分割效果。

    单击展开查看Python脚本示例

    import base64
    import requests
    import os
    import cv2
    import numpy as np
    
    # --- 配置区 ---
    # 1. 服务端接口地址
    SERVICE_ENDPOINT = "http://xxx:xxx" 
    
    # 2. 本地图片路径
    INPUT_IMAGE_PATH = "your/path/workpiece_sample.jpg"
    
    # 3. 结果保存路径
    OUTPUT_IMAGE_PATH = "your/path/workpiece_sample_segmented.jpg"
    
    # 4. 调优参数
    # 图像分割的置信度阈值,取值范围 [0, 1]。值越高,要求模型对工件区域的识别越有信心。
    # 建议从 0.7 开始测试。
    SEG_THRESHOLD = 0.7
    
    # 脚本运行模式:1=测试模式(生成带框预览图),0=执行模式(仅分割,用于批量处理)
    PROCESS_MODE = 1
    # --- 配置区结束 ---
    
    def image_to_base64(image_path: str) -> str:
        """将图像文件转换为Base64编码的字符串。"""
        with open(image_path, "rb") as image_file:
            return base64.b64encode(image_file.read()).decode('utf-8')
    
    def save_base64_to_image(base64_str: str, output_path: str):
        """将Base64字符串解码并保存为图像文件。"""
        try:
            if "base64," in base64_str:
                base64_str = base64_str.split("base64,")[1]
            image_bytes = base64.b64decode(base64_str)
            image_array = np.frombuffer(image_bytes, dtype=np.uint8)
            image = cv2.imdecode(image_array, cv2.IMREAD_COLOR)
            if image is None:
                raise ValueError("无法解码Base64字符串为图像")
            
            os.makedirs(os.path.dirname(output_path), exist_ok=True)
            cv2.imwrite(output_path, image)
            print(f"图像已成功保存至: {output_path}")
        except Exception as e:
            print(f"错误:保存Base64图像失败 - {e}")
    
    def test_segmentation(image_path: str, output_path: str, threshold: float, process_mode: int):
        """调用分割模型并保存结果。"""
        if not os.path.exists(image_path):
            print(f"错误:输入图片不存在 - {image_path}")
            return
    
        base64_image = image_to_base64(image_path)
        filename = os.path.basename(image_path)
        
        api_url = f"{SERVICE_ENDPOINT}/workpiece_seg"
        payload = {
            "image": base64_image,
            "filename": filename,
            "threshold": threshold,
            "process": process_mode
        }
    
        print(f"正在调用API: {api_url},阈值: {threshold}...")
        try:
            response = requests.post(api_url, json=payload, timeout=30)
            response.raise_for_status()
            result = response.json()
            
            if 'image' in result:
                save_base64_to_image(result['image'], output_path)
            else:
                print("错误:API响应中未找到'image'字段。")
    
        except requests.exceptions.RequestException as e:
            print(f"错误:API请求失败 - {e}。检查:\n1. SERVICE_ENDPOINT是否正确。\n2. 客户端IP是否已加入白名单。\n3. 网络连接是否正常。")
        except Exception as e:
            print(f"处理过程中发生未知错误: {e}")
    
    if __name__ == "__main__":
        test_segmentation(INPUT_IMAGE_PATH, OUTPUT_IMAGE_PATH, SEG_THRESHOLD, PROCESS_MODE)
  2. 执行测试与调优:准备包含多种光照、角度的工件图片文件夹(建议30张以上),逐一替换脚本中的INPUT_IMAGE_PATH并调整SEG_THRESHOLD值进行测试。找到一个能让绝大多数图片中的绿色框(切割位置)都完整包裹工件主体的阈值。该阈值将用于后续所有步骤。确保分割准确率大于等于95%。

    原图

    image

    切割结果图

    image

步骤二:构建工件标准模板与部署标注平台

本步骤定义标准工件模板。通过部署在线标注平台(Label Studio),上传标准工件图,并手动框选出需要检测的关键结构(如孔洞),以形成可复用的模板。

  1. 部署数据标注平台(Label Studio):使用PolarDB for AI的内置能力部署一个Label Studio,用于后续所有标注工作。

    1. 使用集群地址登录PolarDB集群。

    2. 执行以下SQL语句,创建用于存储标注模板和源数据的表。

      -- 1. 创建标注模板表,表名固定为 'annotation_template'
      -- 此表用于定义Label Studio中的标注界面和标签。
      CREATE TABLE `annotation_template` (
        `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
        `tp_name` varchar(255) NOT NULL,                 -- 模板名称
        `tp_description` text,                           -- 模板描述
        `tp_schema` json NOT NULL,                       -- JSON 格式的标注 schema
        `tp_is_active` tinyint(1) DEFAULT '1',           -- 是否启用
        UNIQUE KEY `tp_name` (`tp_name`) USING BTREE
      );
      
      -- 2. 插入一条模板记录,用于工件模板标注
      INSERT INTO `annotation_template` (id, tp_name, tp_description, tp_schema, tp_is_active)
      VALUES (1, 'workpiece_template_schema', '用于标注工件上的孔洞结构', '{"type": "ObjectDetection", "labels": ["yuankong", "changkong", "liubianxingkong"]}', 1);
      
      -- 3. 创建标注源数据表,表名必须以 'polardb4ai_annotation_source_' 开头
      -- 此表用于存放待标注的图像数据。
      CREATE TABLE `polardb4ai_annotation_source_template` (
        `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        `base64_data` LONGTEXT COMMENT '图片的Base64编码字符串',
        `mime_type` VARCHAR(100) NOT NULL COMMENT '图片MIME类型,如 "jpeg"',
        `original_name` VARCHAR(255) NOT NULL UNIQUE COMMENT '显示在Label Studio中的任务名称',
        `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        `annotation_data` JSON DEFAULT NULL COMMENT '存储标注结果(JSON)',
        `annotation_create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
        `annotation_update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        `annotation_count` INT DEFAULT 0 COMMENT '标注数量',
        `annotation_uid` VARCHAR(255) DEFAULT NULL COMMENT '标注者ID'
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工件模板标注源数据表';
    3. 将一张标准工件的图像(建议经过图像分割算法预处理,背景清晰)转换为Base64编码,并插入到polardb4ai_annotation_source_template表中。您可通过Python脚本或其他工具将本地图片转为Base64字符串插入。

      INSERT INTO polardb4ai_annotation_source_template
          (id, base64_data, mime_type, original_name)
      VALUES
          (1, '/9j/4AAQSkZJRgABAQEAYABgAAD...', 'jpeg', 'pic_1');

      单击展开查看Python脚本示例

      import os
      import base64
      # 需安装pymysql库,安装命令示例pip install pymysql
      import pymysql
      
      # 数据库配置(请根据你的环境修改)
      DB_CONFIG = {
          'host': '<your_polardb_host>',
          'port': 3306,
          'user': '<your_polardb_username>',
          'password': '<your_polardb_user_password>',
          'database': '<your_polardb_database>'
      }
      
      # 图片文件夹路径(请修改为你的文件夹路径,脚本将上传文件夹下所有图片)
      IMAGE_DIR = '<your_pic_path>'
      # 输入写入的表名,例如polardb4ai_annotation_source_animal
      target_table = '<your_table_name>'
      
      def get_mime_type(filename):
          """根据文件扩展名返回 MIME 类型"""
          ext = filename.lower().split('.')[-1]
          if ext in ['jpg', 'jpeg']:
              return 'jpeg'
          elif ext == 'png':
              return 'png'
          else:
              raise ValueError(f"Unsupported file type: {ext}")
      
      def insert_images_to_db(image_dir):
          connection = pymysql.connect(**DB_CONFIG)
          cursor = connection.cursor()
          id_counter = 1
          for filename in os.listdir(image_dir):
              file_path = os.path.join(image_dir, filename)
              if not filename.lower().endswith(('.jpg', '.jpeg', '.png')):
                  continue
              try:
                  with open(file_path, 'rb') as f:
                      image_data = f.read()
                  base64_str = base64.b64encode(image_data).decode('utf-8')
                  mime_type = get_mime_type(filename)
                  original_name = filename
                  sql = f"""
                      INSERT INTO {target_table}
                      (id, base64_data, mime_type, original_name)
                      VALUES (%s, %s, %s, %s)
                  """
                  cursor.execute(sql, (id_counter, base64_str, mime_type, original_name))
                  print(f"Inserted: {filename} (ID: {id_counter})")
                  id_counter += 1
              except Exception as e:
                  print(f"Error processing {filename}: {e}")
                  break
          connection.commit()
          cursor.close()
          connection.close()
      
      if __name__ == "__main__":
          insert_images_to_db(IMAGE_DIR)
    4. 执行以下命令部署Label Studio。

      /*polar4ai*/DEPLOY MODEL `Label-Studio` WITH (
          annotation_template_id = '1',
          annotation_source = 'polardb4ai_annotation_source_template',
          deployment_name = 'label_studio'
      );
    5. 监控部署状态,直到部署状态变为Serving

      /*polar4ai*/ SHOW DEPLOYMENT `label_studio`;

      部署成功后,会返回Label Studio的公网访问地址(request_path)。

  2. 标注工件模板:在Label Studio中,框选出标准工件上的所有关键结构。

    1. 为保障安全,服务默认禁止所有外部IP访问。您需先配置当前网络的访问白名单。

      /*polar4ai*/UPDATE WHITEIPS `model_label_studio` WITH (ips='118.178.XXX.XXX');
      说明
      • model_mark_animal需替换为SHOW DEPLOYMENT命令返回的white_ip_name值。

      • 118.178.XXX.XXX需替换为实际客户端公网IP地址。

      • 白名单支持配置多个 IP(使用英文逗号,分隔)以及CIDR格式的IP网段(如192.168.100.0/24)。

    2. 访问上一步获取的Label Studio公网访问地址(request_path)。

    3. 在界面中,使用目标检测模板(yuankongchangkongliubianxingkong)为标准工件图上的每一个孔洞创建标注框。image

    4. 完成所有标注后,单击Submit提交标注。标注结果会自动同步回集群的polardb4ai_annotation_source_template 表中的annotation_data字段。

步骤三:构建缺陷检测数据集

利用上一步创建的工件模板,从大量工件图片中裁剪出各个孔洞的独立图像,然后对这些孔洞图像进行合格或缺陷的标注,从而构建用于训练最终分类模型的数据集。

  1. 批量裁剪孔洞图像:生成用于训练的孔洞图像数据集。

    说明

    裁剪服务目前处于灰度阶段。如您有相关需求,请提交工单与我们联系,以便为您提供相关服务与添加模型访问白名单。

    1. 准备一个包含大量待处理工件图像的文件夹,如input

    2. Label Studio中,导出模板标注任务。导出格式必须选择COCO with Images。将下载的result.json文件和对应的图片文件,放置于同级目录下。image

    3. 将以下脚本保存为03_batch_crop.py。该脚本读取模板标注,遍历 input 文件夹下的所有工件图,调用裁剪服务,并将生成的孔洞小图保存到output文件夹。

      单击展开查看Python脚本示例

      # 脚本:03_batch_crop.py
      import base64
      import requests
      import os
      import json
      import cv2
      import sys
      
      # --- 配置区 ---
      # 1. 裁剪服务接口地址
      SERVICE_ENDPOINT = "http://xxx:xxx"
      
      # 2. 使用流程一确定的最佳分割阈值
      SEG_THRESHOLD = 0.7
      
      # 3. 文件与目录路径
      # 确保目录结构如下:
      # your_project/
      # |- 03_batch_crop.py
      # |- template/
      #    |- result.json  (从Label Studio导出的COCO格式标注)
      #    |- images/
      #      |- image.jpg    (与result.json对应的原始模板图)
      # |- input/
      #    |- workpiece_001.jpg
      #    |- workpiece_002.jpg
      #    |- ...
      # |- output/ (脚本会自动创建)
      TEMPLATE_DIR = "template"
      INPUT_DIR = "input"
      OUTPUT_DIR = "output"
      # --- 配置区结束 ---
      
      def parse_coco_label(json_file_path: str) -> dict:
          """解析COCO格式的标注文件。"""
          with open(json_file_path, 'r', encoding='utf-8') as f:
              data = json.load(f)
      
          category_id_to_name = {cat['id']: cat['name'] for cat in data.get('categories', [])}
          result = {"labels": [], "boxes": []}
      
          for annotation in data.get('annotations', []):
              category_id = annotation.get('category_id')
              label = category_id_to_name.get(category_id)
              if not label: continue
      
              bbox = annotation.get('bbox', [])
              if len(bbox) != 4: continue
      
              x0, y0, width, height = bbox
              result["labels"].append(label)
              result["boxes"].append([x0, y0, x0 + width, y0 + height])
          return result
      
      
      def process_images(api_url: str, threshold: float, label_info: dict, template_img_shape: tuple, input_dir: str,
                         output_dir: str):
          """遍历输入目录,调用API处理每张图片。"""
          height, width = template_img_shape
      
          for filename in os.listdir(input_dir):
              if not filename.lower().endswith(('.jpg', '.jpeg', '.png')):
                  continue
      
              file_path = os.path.join(input_dir, filename)
              print(f"正在处理: {filename} ...")
      
              with open(file_path, "rb") as image_file:
                  base64_image = base64.b64encode(image_file.read()).decode('utf-8')
      
              payload = {
                  "image": base64_image,
                  "file_name": filename,
                  "threshold": threshold,
                  "image_s_h": height,
                  "image_s_w": width,
                  "label_info": label_info
              }
      
              try:
                  response = requests.post(api_url, json=payload, timeout=60)
                  response.raise_for_status()
                  result = response.json()
      
                  if "output_images" in result:
                      for img_data in result["output_images"]:
                          out_filename = img_data["filename"]
                          out_base64_image = img_data["image"]
                          out_path = os.path.join(output_dir, out_filename)
      
                          image_bytes = base64.b64decode(out_base64_image)
                          with open(out_path, "wb") as f:
                              f.write(image_bytes)
                      print(f"  -> 成功处理并保存 {len(result['output_images'])} 个裁剪图。")
                  else:
                      print(f"  -> 警告: API未返回任何裁剪图。")
      
              except requests.RequestException as e:
                  print(f"  -> 错误: API请求失败 - {e}")
              except Exception as e:
                  print(f"  -> 错误: 处理失败 - {e}")
      
      
      if __name__ == "__main__":
          # 路径和文件校验
          label_json_path = os.path.join(TEMPLATE_DIR, 'result.json')
      
          # 1. 构建模板图片所在的子目录路径
          template_images_dir = os.path.join(TEMPLATE_DIR, 'images')
      
          # 2. 在该子目录中查找第一张图片
          template_image_path = next((os.path.join(template_images_dir, f) for f in os.listdir(template_images_dir) if
                                      f.lower().endswith(('.jpg', '.jpeg', '.png'))), None)
      
          if not all([os.path.isfile(label_json_path), template_image_path, os.path.isdir(INPUT_DIR)]):
              print("错误:检查 'template' 和 'input' 目录是否配置正确,并包含所需文件。")
              sys.exit(1)
      
          os.makedirs(OUTPUT_DIR, exist_ok=True)
      
          # 解析模板信息
          label_info = parse_coco_label(label_json_path)
          template_image = cv2.imread(template_image_path)
          template_shape = template_image.shape[:2]  # (height, width)
      
          api_url = f"{SERVICE_ENDPOINT}/seg_images_with_json"
          process_images(api_url, SEG_THRESHOLD, label_info, template_shape, INPUT_DIR, OUTPUT_DIR)
          print("\n批量裁剪完成!结果已保存至 'output' 目录。")
  2. 二次部署Label Studio并标注缺陷:对裁剪出的孔洞图像进行分类标注(例如,合格、缺孔、开裂)。

    1. 参考步骤二:构建工件标准模板与部署标注平台的方法,创建一个新的标注源表,如polardb4ai_img_source_workpiece

      -- 创建一个新的标注源表
      CREATE TABLE `polardb4ai_img_source_workpiece` (
        `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        `base64_data` LONGTEXT COMMENT '图片的Base64编码字符串',
        `mime_type` VARCHAR(100) NOT NULL COMMENT '图片MIME类型,如 "jpeg"',
        `original_name` VARCHAR(255) NOT NULL UNIQUE COMMENT '显示在Label Studio中的任务名称',
        `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        `annotation_data` JSON DEFAULT NULL COMMENT '存储标注结果(JSON)',
        `annotation_create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
        `annotation_update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        `annotation_count` INT DEFAULT 0 COMMENT '标注数量',
        `annotation_uid` VARCHAR(255) DEFAULT NULL COMMENT '标注者ID'
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='工件模板标注源数据表';
    2. 将上一步output文件夹中的所有孔洞图像上传到新创建的源表中。

    3. 使用/*polar4ai*/ DROP DEPLOYMENT `label_studio`;删除先前部署的Label Studio。

    4. 等待系统删除原Label Studio后,您可以通过/*polar4ai*/ SHOW DEPLOYMENT `label_studio`;命令查看是否已删除。如果提示Unknown deployment 'label_studio'则代表已完成删除。

    5. 部署一个新的Label Studio,关联新的源表和模板。

      /*polar4ai*/DEPLOY MODEL `Label-Studio` WITH (
          annotation_template_id = '1',
          annotation_source = 'polardb4ai_img_source_workpiece',
          deployment_name = 'label_studio',
          min_replica='1',
          max_replica = '1'
      );
    6. 配置当前网络的访问白名单,访问新的Label Studio,然后对所有孔洞图像进行分类标注。完成后,标注信息会自动同步到数据库。

      image (9)

      image (10)

步骤四:训练并部署一体化质检模型

使用上一步标注好的缺陷数据集训练一个目标检测模型。然后,将这个模型与之前的工件分割、裁剪逻辑打包成一个名为Workpiece-Quality-Inspection的一体化部署,对外提供API接口。

  1. 训练目标检测模型:训练一个能识别孔洞是否合格的AI模型。

    1. 执行以下SQL命令,使用polardb4ai_img_source_workpiece表中的数据创建并训练一个目标检测模型。

      /*polar4ai*/ CREATE MODEL my_object_detection_model WITH (
      model_class = 'object_detection',
      x_cols = 'base64_data, mime_type, original_name',
      y_cols = 'annotation_data',
      model_parameter = (batch_size=4,max_epochs=800, annotation_template_id = '1'))
      AS (SELECT * FROM polardb4ai_img_source_workpiece);
    2. 创建后,您可以通过/*polar4ai*/SHOW MODEL my_object_detection_model;查看创建模型结果。若model_status = saved_oss代表已经创建成功。

  2. 部署目标检测模型

    1. 将上一步训练好的my_object_detection_model部署为一个在线服务。

      /*polar4ai*/ DEPLOY MODEL my_object_detection_model;
    2. 部署后,通过/*polar4ai*/SHOW MODEL my_object_detection_model;查看部署结果,若状态变为Serving表已经部署成功。

  3. 部署内置的Workpiece-Quality-Inspection编排模型:这个模型会自动串联所有步骤,等待部署状态变成Serving

    /*polar4ai*/DEPLOY MODEL `Workpiece-Quality-Inspection` WITH (
    threashold = 0.8, 
    object_detection_deployment_name = 'my_object_detection_model', 
    annotation_template_id = '1',
    annotation_source = 'polardb4ai_img_source_workpiece',
    deployment_name = 'my_workpiece_checkbot'
    );
  4. 获取API调用地址:使用/*polar4ai*/ SHOW DEPLOYMENT my_workpiece_checkbot;命令获取API调用地址request_path

    +------------------------------+-----------------------+-------------------+---------------------+---------------------+-------------------------------------+--------------+----------+----------+---------------+
    | model_name                   | deployment_name       | deployment_status | start_time          | ready_time          | request_path                        | api_key      | username | password | white_ip_name |
    +------------------------------+-----------------------+-------------------+---------------------+---------------------+-------------------------------------+--------------+----------+----------+---------------+
    | Workpiece-Quality-Inspection | my_workpiece_checkbot | Serving           | 2025-12-05 15:09:09 | 2025-12-05 15:11:00 | http://xxx.com/v1/api/predict       | xxx          |          |          |               |
    +------------------------------+-----------------------+-------------------+---------------------+---------------------+-------------------------------------+--------------+----------+----------+---------------+

步骤五:调用服务并验证结果

测试部署的质检模型,验证其功能。向my_workpiece_checkbot部署的API地址发送POST请求。

请求参数

参数

类型

是否必选

说明

image

String

待检测工件图像的Base64编码字符串。

label

String

基准标签,用于自动化测试。传入"Y"(有缺陷)或"N"(无缺陷),API会返回模型判断是否与此标签一致。

返回参数

参数

类型

说明

r

String

模型对工件的判断结果。"Y"表示检测到缺陷(报警),"N"表示合格(不报警)。

r_image

String

标注后的结果图像(Base64编码)。如果检测到缺陷,图像上会框出缺陷位置。

result

String

仅当请求中包含label参数时返回。值为"正确"或"错误",表示模型判断结果r是否与传入的label一致。

调用示例

输入产线图片image(如图1):

  • 如果为合格工件,则返回N(不报警)以及裁切后的工件图片r_image(如图2)。

  • 如果工件存在孔结构缺失,则返回Y(报警),同时r_image会框出缺失孔位(如图3)。

1

image

2

image

3

image