Ostrakon-VL-8B应用场景:药店处方药专柜温湿度计读数识别+超标自动告警

发布时间:2026/7/3 20:23:39

Ostrakon-VL-8B应用场景:药店处方药专柜温湿度计读数识别+超标自动告警 Ostrakon-VL-8B应用场景药店处方药专柜温湿度计读数识别超标自动告警你有没有想过药店里的处方药是怎么保证安全的想象一下一个需要冷藏保存的胰岛素如果药店的冰箱温度超标了病人用了会怎么样或者一个需要避光干燥保存的抗生素因为药柜湿度过高而失效了后果有多严重对于药店来说处方药专柜的温湿度监控不是小事而是关乎用药安全和法律责任的大事。传统的人工巡检靠店员每天几次拿着本子去抄表不仅效率低还容易出错、漏检。万一晚上温度异常等第二天早上发现可能一整柜的贵重药品都已经报废了。今天我要分享一个用AI视觉技术解决这个痛点的实战方案。我们利用一个专门为零售场景优化的多模态视觉模型——Ostrakon-VL-8B来实现药店处方药专柜温湿度计的自动读数识别和超标自动告警。这个方案不需要更换昂贵的智能硬件只需要一个普通的摄像头和这个AI模型就能让药店的药品存储管理变得智能、精准、省心。1. 场景痛点与解决方案1.1 传统温湿度监控的三大痛点在深入技术细节前我们先看看药店实际运营中遇到的麻烦人力成本高效率低下店员需要定时如早、中、晚到各个专柜前手动记录指针式或数字式温湿度计的读数。药店越大专柜越多这项工作就越繁琐耗时。存在漏检和误读风险人工记录难免会因疏忽而漏掉某个时间点的检查或者在读取指针式表盘时产生视觉误差导致记录不准确。无法实时预警这是最致命的问题。药品存储条件往往是持续性的要求如2-8℃恒温。人工巡检的间隔期内一旦温湿度超标无法立即发现并处理可能导致药品在发现问题前就已变质失效造成重大经济损失和安全风险。1.2 AI视觉识别方案的核心价值我们的解决方案思路非常直接用摄像头“代替”人眼用AI模型“代替”大脑实现7x24小时无人化、自动化的精准监控。具体来说就是在每个处方药专柜的温湿度计上方或前方安装一个普通的监控摄像头。摄像头持续拍摄温湿度计表盘或显示屏的画面然后通过Ostrakon-VL-8B这个视觉语言模型实时分析图像完成以下核心任务识别从图像中定位并“看懂”温湿度计。读数准确识别出当前的温度值和湿度值无论是数字还是指针。判断将读取的数值与预设的安全阈值如温度2-8℃湿度35%-65%进行比对。告警一旦数值超标系统立即通过短信、应用推送等方式向药店管理员发出告警。这套方案的价值在于降本增效彻底解放人力将店员从重复的抄表工作中解脱出来。精准可靠AI识别避免了人为误差确保数据记录的准确性。实时主动变被动巡检为主动监控实现分钟级甚至秒级的异常发现能力最大限度保障药品质量。低成本改造无需替换现有的温湿度计硬件利用现有监控设备或低成本摄像头即可部署实施门槛低。2. 为什么选择Ostrakon-VL-8B市面上视觉模型很多为什么这个场景特别适合Ostrakon-VL-8B因为它有两大独特优势。2.1 专为零售场景优化Ostrakon-VL-8B并非通用模型而是基于强大的Qwen3-VL-8B模型专门针对食品服务Food-Service和零售商店Retail Store场景进行了深度微调。这意味着它在理解店铺环境、货架商品、仪表盘、标签文字等元素上具有更强的先天优势。在药店场景中温湿度计可能嵌入在药柜里周围环境复杂可能有反光、阴影或者被其他物品部分遮挡。一个通用的OCR文字识别工具或视觉模型可能无法准确处理。而Ostrakon-VL-8B经过相关场景数据的训练更能“理解”这是一个需要读数的仪表并能排除环境干扰聚焦于表盘或屏幕上的关键信息。2.2 强大的多模态理解与推理能力这个模型的核心能力是“视觉语言理解”。它不仅能“看到”图片还能“理解”你的问题并基于看到的内容进行“推理”和“回答”。对于温湿度计识别任务我们可以这样利用它的能力视觉感知模型能清晰识别图像中的物体是“一个温湿度计”。文字识别OCR如果温湿度计是数字式的它能准确读取屏幕上显示的数字例如“温度5.3℃ 湿度45%”。视觉问答VQA对于指针式温湿度计我们可以通过提问的方式让它“解读”。例如提问“图片中温度计的指针指向哪个数字湿度计的指针指向哪个刻度”模型可以分析指针与刻度的相对位置给出推断读数。逻辑判断我们可以直接提问“当前温度是否在2到8摄氏度之间”模型会根据识别到的读数给出“是”或“否”的判断这直接为自动告警提供了逻辑输入。3. 系统搭建与核心代码实现下面我们来看看如何快速搭建这套自动监控系统。假设你已经在一台带有GPU的服务器上部署好了Ostrakon-VL-8B模型部署步骤可参考其官方文档。3.1 系统架构概览整个系统可以简化为三个部分图像采集端网络摄像头定时如每分钟拍摄药柜温湿度计图片并上传到服务器。AI处理中心运行Ostrakon-VL-8B模型的服务器接收图片调用模型进行分析并输出识别结果。告警与日志系统根据AI处理结果判断是否超标并触发告警如发送邮件、短信同时将读数和时间戳记录到数据库或日志文件中。3.2 核心识别代码示例我们编写一个Python脚本作为AI处理中心的核心。这个脚本会加载Ostrakon-VL-8B模型并定义一个函数来处理摄像头传来的图片。import torch from transformers import Qwen3VLForConditionalGeneration, AutoTokenizer from PIL import Image import requests from io import BytesIO import logging import time # 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s) logger logging.getLogger(__name__) class PharmacyMonitor: def __init__(self, model_path, devicecuda): 初始化监控器加载Ostrakon-VL-8B模型 :param model_path: 模型本地路径例如 /root/ai-models/Ostrakon/Ostrakon-VL-8B/ :param device: 运行设备cuda 或 cpu logger.info(f正在加载模型路径: {model_path}) self.tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) self.model Qwen3VLForConditionalGeneration.from_pretrained( model_path, torch_dtypetorch.float16, device_mapdevice, trust_remote_codeTrue ).eval() logger.info(模型加载完毕) # 预设的药柜温湿度安全阈值 self.temp_min 2.0 # 最低温度 ℃ self.temp_max 8.0 # 最高温度 ℃ self.humi_min 35.0 # 最低湿度 % self.humi_max 65.0 # 最高湿度 % def analyze_image(self, image_source, cabinet_idCabinet_01): 核心分析函数识别图片中的温湿度并判断是否超标 :param image_source: 图片路径str或PIL.Image对象或图片URL :param cabinet_id: 药柜标识符 :return: dict 包含识别结果和告警状态 try: # 1. 加载图片 if isinstance(image_source, str): if image_source.startswith(http): response requests.get(image_source) image Image.open(BytesIO(response.content)) else: image Image.open(image_source) elif isinstance(image_source, Image.Image): image image_source else: raise ValueError(不支持的图片源类型) # 2. 构建给模型的提示词Prompt # 提示词设计是关键要清晰告诉模型我们需要什么 prompt f 你是一个药店智能监控系统。请分析这张图片。 图片中是一个处方药专柜的温湿度计。 请执行以下任务 1. 识别当前温度值单位摄氏度℃。 2. 识别当前湿度值单位百分比%。 3. 如果无法直接读取数字请描述指针位置或显示状态。 请以JSON格式回答包含以下字段 - temperature: 温度数值如果是数字或描述字符串。 - humidity: 湿度数值如果是数字或描述字符串。 - reading_type: “digital”数字或 “analog”指针或 “unclear”不清晰。 # 3. 调用模型进行推理 logger.info(f开始分析药柜 [{cabinet_id}] 的图片...) query self.tokenizer.from_list_format([ {image: image}, # 传入图片 {text: prompt}, # 传入问题 ]) inputs self.tokenizer.apply_chat_template( query, add_generation_promptTrue, tokenizeTrue, return_dictTrue, return_tensorspt ).to(self.model.device) # 生成回答 with torch.no_grad(): generated_ids self.model.generate( **inputs, max_new_tokens512, do_sampleFalse ) generated_ids_trimmed [ out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids) ] response_text self.tokenizer.decode(generated_ids_trimmed[0], skip_special_tokensTrue) logger.info(f模型原始回复: {response_text}) # 4. 解析模型回复这里需要根据模型回复格式进行简单解析 # 假设模型返回了一段包含JSON的文本我们需要提取它。 # 在实际应用中可能需要更鲁棒的解析例如使用正则表达式或尝试json.loads import json import re # 尝试查找JSON部分 json_match re.search(r\{.*\}, response_text, re.DOTALL) if json_match: result_str json_match.group() try: analysis_result json.loads(result_str) except json.JSONDecodeError: analysis_result {error: 解析模型回复失败, raw_text: response_text[:200]} else: analysis_result {error: 未找到标准回复, raw_text: response_text[:200]} # 5. 判断是否超标并生成告警信息 alert_messages [] status NORMAL temp_value analysis_result.get(temperature) humi_value analysis_result.get(humidity) # 尝试提取数值如果结果是数字 def extract_number(value): if isinstance(value, (int, float)): return float(value) if isinstance(value, str): # 简单提取字符串中的数字 nums re.findall(r[-]?\d*\.\d|\d, value) return float(nums[0]) if nums else None return None temp_num extract_number(temp_value) humi_num extract_number(humi_value) if temp_num is not None: if temp_num self.temp_min: alert_messages.append(f⚠️ 温度过低: {temp_num}℃ 最低阈值 {self.temp_min}℃) status ALERT elif temp_num self.temp_max: alert_messages.append(f⚠️ 温度过高: {temp_num}℃ 最高阈值 {self.temp_max}℃) status ALERT if humi_num is not None: if humi_num self.humi_min: alert_messages.append(f⚠️ 湿度过低: {humi_num}% 最低阈值 {self.humi_min}%) status ALERT elif humi_num self.humi_max: alert_messages.append(f⚠️ 湿度过高: {humi_num}% 最高阈值 {self.humi_max}%) status ALERT # 6. 组装最终结果 final_result { cabinet_id: cabinet_id, timestamp: time.strftime(%Y-%m-%d %H:%M:%S), analysis: analysis_result, numeric_values: { temperature_c: temp_num, humidity_percent: humi_num }, status: status, alerts: alert_messages, thresholds: { temperature: [self.temp_min, self.temp_max], humidity: [self.humi_min, self.humi_max] } } logger.info(f分析完成。状态: {status}) if alert_messages: logger.warning(f告警信息: {alert_messages}) return final_result except Exception as e: logger.error(f分析图片时发生错误: {e}, exc_infoTrue) return { cabinet_id: cabinet_id, timestamp: time.strftime(%Y-%m-%d %H:%M:%S), error: str(e), status: ERROR } # 使用示例 if __name__ __main__: # 初始化监控器指定模型路径 monitor PharmacyMonitor(model_path/root/ai-models/Ostrakon/Ostrakon-VL-8B/) # 示例1分析一张本地图片 result1 monitor.analyze_image(/path/to/your/thermometer_photo.jpg, cabinet_id冷藏柜_A) print(结果1:, json.dumps(result1, indent2, ensure_asciiFalse)) # 示例2分析一个网络图片URL假设是摄像头快照 # result2 monitor.analyze_image(http://your-camera-ip/snapshot.jpg, cabinet_id阴凉柜_B) # print(结果2:, json.dumps(result2, indent2, ensure_asciiFalse))3.3 告警与定时任务集成有了核心识别函数我们还需要一个“调度员”来定时执行任务并触发告警。下面是一个简单的定时扫描与告警示例import schedule import time import json from datetime import datetime def job_camera_scan(cabinet_info_list): 定时任务扫描指定药柜的摄像头 for cabinet in cabinet_info_list: cab_id cabinet[id] img_url cabinet[camera_snapshot_url] # 摄像头快照地址 logger.info(f定时扫描药柜: {cab_id}) result monitor.analyze_image(img_url, cab_id) # 记录日志这里可以改为存入数据库 log_entry { scan_time: datetime.now().isoformat(), result: result } with open(fmonitor_log_{cab_id}.jsonl, a) as f: f.write(json.dumps(log_entry) \n) # 检查并触发告警 if result.get(status) ALERT: trigger_alert(result) def trigger_alert(alert_data): 触发告警可以发送邮件、短信或调用Webhook cab_id alert_data[cabinet_id] alerts alert_data[alerts] message f【药店温湿度告警】\n药柜{cab_id}\n时间{alert_data[timestamp]}\n问题{.join(alerts)} logger.critical(f触发告警: {message}) # 示例打印告警信息实际可替换为发送邮件/短信的代码 print( 告警信息 ) print(message) print() # 这里可以集成如smtplib发邮件或requests调用短信API # 配置要监控的药柜列表 cabinet_list [ {id: 冷藏柜_01, camera_snapshot_url: http://192.168.1.101/jpg}, {id: 阴凉柜_02, camera_snapshot_url: http://192.168.1.102/jpg}, ] # 初始化监控器全局一个即可 monitor PharmacyMonitor(model_path/root/ai-models/Ostrakon/Ostrakon-VL-8B/) # 设置定时任务每5分钟执行一次 schedule.every(5).minutes.do(job_camera_scan, cabinet_info_listcabinet_list) logger.info(药店温湿度智能监控系统已启动开始定时扫描...) while True: schedule.run_pending() time.sleep(1)4. 方案优势与实施建议4.1 本方案的核心优势高精度与强鲁棒性得益于Ostrakon-VL-8B在零售场景的专项优化其对复杂柜台环境、不同款式温湿度计数字/指针、以及一定程度的光线变化、角度偏移都具有较好的识别鲁棒性比通用OCR方案更可靠。部署灵活成本极低无需改造现有药柜和温湿度计利用现有或新增的低成本网络摄像头即可。AI模型部署在本地服务器数据不出局域网安全可控。功能可扩展性强基于此框架可以轻松扩展其他监控功能。例如用同一摄像头和模型增加“药品摆放是否整齐”、“柜门是否关闭”、“是否有无关人员靠近”等识别任务实现一机多用。决策支持模型不仅能读数还能基于你的提问进行简单推理和判断为后续更复杂的自动化决策如联动空调除湿机提供了可能。4.2 实施落地建议如果你想在自家药店尝试这个方案可以参考以下步骤硬件准备摄像头选择支持RTSP或HTTP快照输出的网络摄像头清晰度至少1080P确保能拍清温湿度计表盘数字。服务器一台带有NVIDIA GPU显存建议16GB以上的电脑或服务器用于运行Ostrakon-VL-8B模型。也可以使用云端GPU服务器。环境部署按照Ostrakon-VL-8B官方指南在服务器上部署好模型环境。将上述核心代码部署到服务器并配置好药柜摄像头的信息IP、快照地址。提示词Prompt优化这是提升识别准确率的关键。针对你家药店具体的温湿度计款式比如是双显表还是两个单表可以微调提示词。例如对于指针式表盘提示词可以更具体“请分别读取左边温度计和右边湿度计的指针所指的刻度值温度计范围是-10到50℃湿度计范围是0%到100%。”测试与校准在正式运行前用摄像头拍摄不同角度、不同光线下的温湿度计图片进行大量测试验证识别准确率。将AI读数与人工读数进行对比校准必要时可以加入一个简单的线性校正系数。告警渠道集成将trigger_alert函数中的告警逻辑替换成真实的告警通道如集成钉钉/企业微信机器人、发送短信使用阿里云、腾讯云短信服务、或拨打语音电话。数据可视化可选可以将识别结果存入数据库如MySQL、InfluxDB然后使用Grafana等工具制作实时监控看板直观展示各药柜温湿度历史曲线和实时状态。5. 总结药店处方药专柜的温湿度监控从一项依赖人力的、容易出错的重复性工作转变为一项全自动、高精准、实时响应的智能任务其价值不言而喻。通过Ostrakon-VL-8B这个强大的场景专用视觉模型我们能够以极低的硬件改造成本构建起一套可靠的“AI质检员”系统。这个方案不仅解决了实时监控的痛点其产生的连续、准确的温湿度日志数据更是药店进行质量管理、合规审计的数字化资产。未来结合更多的传感器和AI分析能力这样的智能系统可以覆盖药店运营的更多环节真正实现零售药店的数字化与智能化升级。技术的意义在于解决实际问题。希望这个基于Ostrakon-VL-8B的药店温湿度智能监控方案能为你带来切实的灵感和价值。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻