站长信息
jeffery.xu
jeffery.xu

软件工程师

欢迎访问我的个人笔记网站!我是一名热爱技术的开发者,专注于Web开发和技术分享。

811495111@qq.com
18521510875
筛选

个人笔记

雅培CRDx财务部Q3CR
工作笔记

医院编号管理功能调整

  1. 新增医院总院字段,在新增及修改操作时,业务人员可借助放大镜工具从 DMS 系统医院主数据中选择相关数据,同时支持数据的查询与导出。
  1. 将医院级别字段修改为放大镜形式,并设定为必填项,其数据来源变更为医院等级主数据,且支持查询导出功能。
  1. 增设医院英文名字段,支持手工维护,同时具备查询导出功能。
  1. 修改数据同步功能。点击“数据同步”时,需将当前医院信息同步至SOI系统 “终端信息管理→医院信息维护→医院信息维护” 中。在同步过程中,要增加判断逻辑,仅当 DMS 系统中不存在医院编号时才执行同步操作,若已存在则给出相应提示。此外,同步还需将新增英文名、级别、总院等字段同步至“终端信息管理→医院信息维护→医院信息维护”。
  1. 在“终端信息管理→医院信息维护→医院信息维护”功能中,添加英文名、级别、总院以展示相关数据。
  1. 数据同步时,若在医院编号管理功能里数据未填写总院信息,则默认该医院的总院为其自身,保存时,其外键为SOI_CustomerInfo 表的主键。

经销商与医院关系管理功能调整

  1. 当系统手动停用关联关系时,将停用时间默认值从当前时间 +60 天调整为当前时间。
  1. 调整系统自动停用关联关系的逻辑,把停用时间默认值从当前时间 +60 天改为当前时间。同时,需对仪器签约导入、开票信息导入等功能及相关存储过程进行检查,去除自动创建经销商客户关系的额外代码逻辑,仅保留依据当前导入数据创建经销商与医院关系的相关代码。另外,对于停用关系的代码,将停用时间统一设定为当前时间,不再额外增加 60 天。

去除 DMS 系统自动创建经销商医院客户关系功能

  1. 经销商信息管理模块中的新增修改一、二级经销商关系功能。
  1. 经销商客户关系管理模块中的新增修改经销商医院关系功能。
  1. 机器信息管理模块中的上传仪器签约指标功能。
  1. 年中经销商签约导入功能。

退款审批逻辑调整

退款审批通过后,系统依据已开票退款生成退款预提信息,依据待开票情况生成负数开票明细信息。
新增逻辑:
生成的预提数据或开票数据需与当前退款申请单及退款单中的退款原因及退款备注建立 Mapping 关系,并进行系统存储,同时需新增相应的关系表。

报表功能调整

SOI 相关报表(退款明细报表、开票明细报表、预提明细报表、预提汇总报表)

  1. 在上述三个报表功能的列表页面,新增退款原因字段,支持查询及导出操作。
  1. 在导出数据时,新增退款备注字段的导出功能。
  1. 修复预提导入的数据在预提汇总功能中点击查看按钮时出现的报错问题,确保操作正常无报错。
  1. 创建数据导入功能,具体包括仪开票明细,预提明细增加 VAT 发票信息导入。根据BPCS订单号导入VAT发票号。

DMS 相关报表(开票明细报表、预提明细报表)

  1. 在两个报表功能的列表页面,新增退款原因字段,支持查询及导出。
  1. 在导出数据时,新增退款备注字段的导出功能。
  1. 修改开票明细报表,将原来的预提时间改为BPCS返回时间,修改查询条件和导出。

新增医院 VS 仪器关系报表

新增医院仪器关系报表功能
报表字段: Region、经销商 BPCS 代码、经销商 DMS 代码、经销商名称、BPCS Account、一级经销商代码、一级经销商名称、医院编码、医院名称、仪器编码、仪器名称、近三个月是否有销售、当前年是否有开票、经销商客户关系状态、经销商客户关系停用时间等,同时支持数据的查询与导出。
 
3.1.2
人工智能学习

Python代码:

 

根据数据统计,用户在一天内不同时段的亮度与色温偏好如下:

• 上午(6–12点): 平均亮度 51.7,色温 3689K

• 下午(12–18点): 平均亮度 49.9,色温 3732K

• 晚上(18–24点): 平均亮度 48.1,色温 3661K

二、功能使用频率分析(3

• 使用最频繁场景: Relax Mode273次)

• 使用适中场景: Reading Mode264次),WorkMode237次)

• 使用较少场景: Sleep Mode226次)

三、响应时间分析(3

• 平均响应时间为1.06

延迟瓶颈: 网络瓶颈,系统处理能力是可能的延迟原因

3.2.1-5问题回答
人工智能学习
  1. 用户界面设计:提供一个简洁直观的用户界面,方便用户上传图片和查看识别结果。
  2. 模型加载:系统启动时预加载模型和标签,减少用户等待时间。
  3. 图像上传与预处理:允许用户上传图片,并自动进行必要的预处理。
  4. 图像识别:后台使用 “resnet.onnx” 模型处理预处理后的图片。
  5. 结果展示:清晰展示识别结果,包括最可能的类别和概率。
  6. 交互反馈:提供用户反馈选项,以改进模型性能。
  7. 帮助与支持:内置帮助文档和客服支持,提升用户体验。
  8. 性能优化:优化系统响应速度和模型处理能力。
  9. 安全性考虑:确保用户数据安全和隐私保护。
  10. 多语言支持:界面支持多语言,满足全球用户需求。

可访问性:确保 UI 无障碍,方便所有用户操作

3.2.5
人工智能学习

import os

import time

import cv2

import numpy as np

import vision.utils.box_utils_numpy as box_utils

import onnxruntime as ort

 

# 定义预测函数,对模型输出的边界框和置信度进行后处理

def predict(width, height, confidences, boxes, prob_threshold, iou_threshold=0.3, top_k=-1):

    boxes = boxes[0]

    confidences = confidences[0]

    picked_box_probs = []

    picked_labels = []

    for class_index in range(1, confidences.shape[1]):

        probs = confidences[:, class_index]

        mask = probs > prob_threshold

        probs = probs[mask]

        if probs.shape[0] == 0:

            continue

        subset_boxes = boxes[mask, :]

        box_probs = np.concatenate([subset_boxes, probs.reshape(-1, 1)], axis=1)

        box_probs = box_utils.hard_nms(box_probs,

                                       iou_threshold=iou_threshold,

                                       top_k=top_k,

                                       )

        picked_box_probs.append(box_probs)

        picked_labels.extend([class_index] * box_probs.shape[0])

    if not picked_box_probs:

        return np.array([]), np.array([]), np.array([])

    picked_box_probs = np.concatenate(picked_box_probs)

    picked_box_probs[:, 0] *= width

    picked_box_probs[:, 1] *= height

    picked_box_probs[:, 2] *= width

    picked_box_probs[:, 3] *= height

    return picked_box_probs[:, :4].astype(np.int32), np.array(picked_labels), picked_box_probs[:, 4]

 

# 从标签文件中读取每一行,并去除行首尾的空白字符,得到类别名称列表 2

class_names = [name.strip() for name in open('voc-model-labels.txt').readlines()]

 

# 创建 ONNX Runtime 的推理会话,用于运行模型进行推理 2

ort_session = ort.InferenceSession('version-RFB-320.onnx')

 

# 获取模型输入的名称 2

input_name = ort_session.get_inputs()[0].name

 

# 定义保存检测结果图像的目录路径

result_path = "./detect_imgs_results_onnx"

 

# 定义置信度阈值,用于筛选出置信度较高的检测结果

threshold = 0.7

# 定义存储待检测图像的目录路径

path = "imgs"

# 用于统计所有图像中检测到的目标框总数,初始化为 0

sum = 0

 

# 如果保存结果的目录不存在,则创建该目录 2

if not os.path.exists(result_path):

    os.mkdir(result_path)

   

# 获取指定目录下的所有文件和文件夹名称列表

listdir = os.listdir(path)

 

# 遍历目录下的每个文件

for file_path in listdir:

    # 拼接图像文件的完整路径

    img_path = os.path.join(path, file_path)

    # 使用 OpenCV 读取图像文件 2

    orig_image = cv2.imread(img_path)

    # 将图像从 BGR 颜色空间转换为 RGB 颜色空间(许多模型要求输入为 RGB 格式)

    image = cv2.cvtColor(orig_image, cv2.COLOR_BGR2RGB)

    # 将图像调整为 320x240 的尺寸(符合模型输入的尺寸要求) 2

    image = cv2.resize(image, (320, 240))

    # 定义图像归一化的均值数组 2

    image_mean = np.array([127, 127, 127])

    # 对图像进行归一化处理,减去均值并除以 128

    image = (image - image_mean) / 128

    # 将图像的维度从 (高度, 宽度, 通道数) 转换为 (通道数, 高度, 宽度)

    image = np.transpose(image, [2, 0, 1])

    # 在第一个维度上扩展一个维度,将图像变为 (1, 通道数, 高度, 宽度),以符合模型输入的维度要求  1

    image = np.expand_dims(image, axis=0)

    # 将图像数据类型转换为 float32 类型

    image = image.astype(np.float32)

    # 记录开始时间,用于计算模型推理的耗时

    time_time = time.time()

    # 使用 ONNX Runtime 运行模型,输入图像数据,得到模型输出的置信度和边界框  2

    confidences, boxes = ort_session.run(None, {input_name: image})

    # 计算并打印模型推理的耗时

    print("cost time:{}".format(time.time() - time_time))

    # 调用 predict 函数对模型输出的边界框和置信度进行后处理,得到最终的边界框、类别标签和置信度

    boxes, labels, probs = predict(orig_image.shape[1], orig_image.shape[0], confidences, boxes, threshold)

    # 遍历每个检测到的目标框

    for i in range(boxes.shape[0]):

        # 获取当前目标框的坐标

        box = boxes[i, :]

        # 生成当前目标框的标签字符串,包含类别名称和置信度

        label = f"{class_names[labels[i]]}: {probs[i]:.2f}"

 

        # 在原始图像上绘制目标框,颜色为 (255, 255, 0),线条粗细为 4

        cv2.rectangle(orig_image, (box[0], box[1]), (box[2], box[3]), (255, 255, 0), 4)

        # 将绘制了目标框的图像保存到结果目录中

        cv2.imwrite(os.path.join(result_path, file_path), orig_image)

    # 累加当前图像中检测到的目标框数量到总数中

    sum += boxes.shape[0]

# 打印所有图像中检测到的目标框总数

print("sum:{}".format(sum))

3.2.4
人工智能学习

import onnxruntime as ort
import numpy as np
import scipy.special
from PIL import Image
#
预处理图像
def preprocess_image(image, resize_size=256, crop_size=224, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]):
    image = image.resize((resize_size, resize_size), Image.BILINEAR)
    w, h = image.size
    left = (w - crop_size) / 2
    top = (h - crop_size) / 2
    image = image.crop((left, top, left + crop_size, top + crop_size))
    image = np.array(image).astype(np.float32)
    image = image / 255.0
    image = (image - mean) / std
    image = np.transpose(image, (2, 0, 1))
    image = image.reshape((1,) + image.shape)
    return image
#
加载模型  2
session = ort.InferenceSession('flower-detection.onnx')
#
加载类别标签 2
with open('labels.txt') as f:
    labels = [line.strip() for line in f.readlines()]
#
获取模型输入和输出的名称
input_name = session.get_inputs()[0].name
output_name = session.get_outputs()[0].name
#
加载图片  2
image = Image.open('flower_test.png').convert('RGB')
#
预处理图片  2
processed_image = preprocess_image(image)
#
确保输入数据是 float32 类型
processed_image = processed_image.astype(np.float32)
#
进行图片识别  2
output = session.run([output_name], {input_name: processed_image})[0]
#
应用 softmax 函数获取识别分类后的准确率  2
accuracy = scipy.special.softmax(output, axis=-1)
#
获取预测的类别索引
predicted_idx = np.argmax(accuracy)
#
获取预测的准确值(转换为百分比)
prob_percentage = accuracy[0, predicted_idx] * 100


#
获取预测的类别标签
predicted_label = labels[predicted_idx]
#
输出预测结果,包含百分比形式的概率
print(f"Predicted class: {predicted_label}, Accuracy: {prob_percentage:.2f}%")

3.2.3
人工智能学习

import onnx
import numpy as np
from PIL import Image
import onnxruntime as ort
#
定义预处理函数,用于将图片转换为模型所需的输入格式
def preprocess(image_path):
    input_shape = (1, 1, 64, 64)    #
模型输入期望的形状,这里是 (N, C, H, W)N=batch size, C=channels, H=height, W=width
    img = Image.open(image_path).convert('L')    #
打开图像文件并将其转换为灰度图  1
    img = img.resize((64, 64), Image.Resampling.LANCZOS)    #
调整图像大小到模型输入所需的尺寸
    img_data = np.array(img, dtype=np.float32)    #
PIL图像对象转换为numpy数组,并确保数据类型是float32
    #
调整数组的形状以匹配模型输入的形状
    img_data = np.expand_dims(img_data, axis=0)  #
添加 batch 维度
    img_data = np.expand_dims(img_data, axis=1)  #
添加 channel 维度
    assert img_data.shape == input_shape, f"Expected shape {input_shape}, but got {img_data.shape}"    #
确保最终的形状与模型输入要求的形状一致
    return img_data    #
返回预处理后的图像数据
#
定义情感类别与数字标签的映射表 2
emotion_table = {'neutral':0, 'happiness':1, 'surprise':2, 'sadness':3, 'anger':4, 'disgust':5, 'fear':6, 'contempt':7}
#
加载模型 2
ort_session = ort.InferenceSession('emotion-ferplus.onnx')    #
使用onnxruntime创建一个会话,用于加载并运行模型
#
加载本地图片并进行预处理 2
input_data = preprocess('img_test.png')
#
准备输入数据,确保其符合模型输入的要求
ort_inputs = {ort_session.get_inputs()[0].name: input_data}    # ort_session.get_inputs()[0].name
是获取模型的第一个输入的名字
#
运行模型,进行预测 2
ort_outs = ort_session.run(None, ort_inputs)
#
解码模型输出,找到预测概率最高的情感类别 2
predicted_label = np.argmax(ort_outs[0])
print(predicted_label)
#
根据预测的标签找到对应的情感名称 2
predicted_emotion = list(emotion_table.keys())[predicted_label]
#
输出预测的情感
print(f"Predicted emotion: {predicted_emotion}")

3.2.2
人工智能学习

代码:

import onnxruntime

import numpy as np

from PIL import Image

# 加载ONNX模型  2

ort_session = onnxruntime.InferenceSession("mnist.onnx")

# 加载图像 2

image = Image.open("img_test.png").convert('L')  # 转为灰度图

# 图像预处理 4

image = image.resize((28, 28))  # 调整大小为MNIST模型的输入尺寸1

image_array = np.array(image, dtype=np.float32)  # 转为numpy数组1

image_array = np.expand_dims(image_array, axis=0)  # 添加batch维度1

image_array = np.expand_dims(image_array, axis=0)  # 添加通道维度1

# 使用模型对图片进行识别 2

ort_inputs = {ort_session.get_inputs()[0].name: image_array}

# 执行预测 2

ort_outs = ort_session.run(None, ort_inputs)

# 获取预测结果 2

predicted_class = np.argmax(ort_outs[0])

# 输出预测结果
print(f"Predicted class: {predicted_class}")

3.2.1
人工智能学习

import onnxruntime as ort
import numpy as np
import scipy.special
from PIL import Image
#
预处理图像
def preprocess_image(image, resize_size=256, crop_size=224, mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]):
  image = image.resize((resize_size, resize_size), Image.BILINEAR)
  w, h = image.size
  left = (w - crop_size) / 2
  top = (h - crop_size) / 2
  image = image.crop((left, top, left + crop_size, top + crop_size))
  image = np.array(image).astype(np.float32)
  image = image / 255.0
  image = (image - mean) / std
  image = np.transpose(image, (2, 0, 1))
  image = image.reshape((1,) + image.shape)
  return image

  #
模型加载 2

session = ort.InferenceSession('resnet.onnx')
  #
加载类别标签
labels_path = 'labels.txt'
with open(labels_path) as f:
  labels = [line.strip() for line in f.readlines()]
  #
获取模型输入和输出的名称
input_name = session.get_inputs()[0].name
output_name = session.get_outputs()[0].name
  #
加载图片 2
image = Image.open('img_test.jpg').convert('RGB')
  #
预处理图片 2
processed_image = preprocess_image(image)
  #
确保输入数据是 float32 类型
processed_image = processed_image.astype(np.float32)
  #
进行图片识别 2
output = session.run([output_name], {input_name: processed_image})[0]
  #
应用 softmax 函数获取概率 2
probabilities = scipy.special.softmax(output, axis=-1)
  #
获取最高的5个概率和对应的类别索引 2
top5_idx = np.argsort(probabilities[0])[-5:][::-1]
top5_prob = probabilities[0][top5_idx]
  #
打印结果
print("Top 5 predicted classes:")
for i in range(5):
  print(f"{i + 1}: {labels[top5_idx[i]]} - Probability: {top5_prob[i]}")

4.2.4
人工智能学习

自动驾驶汽车感知系统数据采集与标注指导方案

1. 数据采集方案

l  多传感器融合:结合摄像头、激光雷达(LiDAR)、毫米波雷达、GPS IMU 等多种传感器,实现全面的环境感知

l  场景覆盖:覆盖城市道路、高速公路、隧道、雨雪天、夜间等多种典型驾驶场景,确保数据多样性与泛化能力

l  事件触发采集:在特定事件发生时(如紧急刹车、避让行动),自动触发额外数据采集,以捕获关键时刻。

l  数据质量控制:设置传感器校准流程,过滤模糊、过曝、传感器失效等无效数据,确保采集数据的可用性和一致性

l  数据加密与传输:采用安全的数据传输协议,确保数据在传输过程中的安全性。

2. 数据标注方案

l  定义标注标准:明确标注类别、边界框精度要求、遮挡处理规则等。

l  选择标注工具:使用专业的数据标注软件,支持2D框、3D框、语义分割等标注类型。

l  标注员培训:对标注员进行专业培训,确保他们理解标注标准,熟悉工具使用。

l  执行标注任务:分配数据给标注团队,设定清晰的任务指标和截止日期。

l  质量控制与复查:实施多级检查,包括自动检查和人工复查,确保标注的准确性和一致性。

数据整合与存储:将标注后的数据整合,形成高质量结构化数据集,存储在安全的数据仓库中,供模型训练使用

4.2.3
人工智能学习

AI智能安防监控系统采集和处理指导方案

1. 数据采集方法

l  高清视频流采集:部署高清摄像头,确保视频画面清晰,便于AI算法识别细节。

l  多角度覆盖:合理布置摄像头,确保监控区域无死角,覆盖所有入口、出口和敏感区域。

l  夜间与低光环境适应:使用带有红外夜视功能的摄像头,保证夜间或低光条件下仍能捕捉到清晰图像。

l  数据传输与存储:采用稳定的数据传输网络,确保视频流的实时传输,同时建立安全的本地或云端视频存储系统,保存原始视频和分析结果。

2. 数据处理方案

l  视频流预处理:包括帧抽取、图像去噪、分辨率调整和目标区域增强,提升后续识别算法效率

l  行为分析与异常检测:通过人体姿态识别、运动轨迹跟踪等技术,识别跌倒、奔跑、翻越等异常行为

l  隐私保护算法:在不影响异常行为识别的前提下,对视频中无关个体进行模糊处理,保护个人隐私。

l  数据融合与决策支持:结合多个摄像头的数据,进行空间和时间上的数据融合,构建更全面的场景理解,为安全决策提供依据。

3. 系统优化与安全措施

l  算法优化:持续训练和优化AI模型,提升异常行为识别的准确率与实时响应能力

l  隐私合规:确保系统设计和运营遵守GDPRCCPA等数据保护法规,定期进行隐私影响评估。

安全防护:实施数据加密、访问控制和防火墙等安全措施,防止数据泄露和系统被攻击。