PillCheck 扫描是做什么的功能
PillCheck 应用已于 10 月 4 日在 App Store 上架,在 Google Play 也能下载。这个连载每篇看应用的一个功能。第一篇讲所有记录的起点——扫描。
PillCheck 是在一个地方查看所服药物信息、服药时间和调剂记录的服务。这些画面都要在药物被记录之后才有意义。扫描让你不必逐个输入药名,只要用相机对准手中的纸张就能记录。
扫描画面的对象有三个:处方、药袋、药片。本文讲前两个。药袋用二维码记录,处方用照片记录。药片是根据药片照片推荐相似药物候选的独立功能。
网页版(www.pillcheck.co.kr)的照片登记已在上一篇「PillCheck OCR」中介绍过。这次的新内容是应用。在应用里,照片离开手机之前会在手机里多经过一道步骤。
在应用里的使用顺序

第一,点击屏幕最下方菜单中的「扫描」。不需要再按「拍摄」之类的按钮,相机会直接打开。第一次使用时会请求相机权限。
第二,在上方从处方、药袋、药片中选出手里拿着的东西。在相机画面上左右滑动也能切换到相邻的对象。
第三,如果是药袋,就把二维码对准画面中的方框。不用按任何按钮,一识别出二维码,调剂记录就会保存。二维码是用小方格图案存储信息的代码,药袋上的二维码里装着调出这次调剂记录的钥匙。保存记录需要登录。
第四,处方在处方标签里按快门拍照。在应用里,处方用照片而不是二维码记录。结果进入记录后,确认识别出的药名和用法,错误的地方进行修改。
按下快门的瞬间,手机里发生了什么
按下快门后,照片只存在于应用使用的临时空间里。它不会保存到手机相册,处理结束后应用会把它删除。
接着,手机自己读取照片里的文字。文字识别是把照片中的字符转换成计算机能够处理的文字的技术。PillCheck 应用自带这项功能,所以不用通过网络发送,手机就能在本机找出文字及其位置。
如果手机从头到尾可靠地读出了整张药品表,就只记录读出的药物清单,不发送照片。这样记录的药物会以未确认状态存入,在用户确认之前不会被当作已确认的药物使用。不过处方格式五花八门,仅靠手机可靠读完整张表的情况目前还不多。
否则,照片会被发送到文字识别服务器做更精确的读取。服务器是 PillCheck 运营的远程计算机。正是在这一步之前,手机会遮盖个人信息。
处方照片遮盖什么、保留什么
遮盖的是能认出患者的信息:患者姓名栏和居民登记号码栏、在其他位置再次印出的患者姓名、监护人等其他个人的姓名、手机号码,以及条形码。条形码是用粗细不同的条纹或点阵图案存储信息的代码,从外表看不出里面装了什么,所以找到的条形码一律涂掉。
保留的是药品表和医疗机构信息。服务器需要读取的是药名和用法,而医院和药房信息被认定为并不指向个人。药房名称和医院名称由手机在遮盖之前从原图中单独读取并传递,PillCheck 会把它们与医疗机构名单比对后附加到记录上。患者和药师的姓名也不会通过这条路径传递。
遮盖不是按字符,而是按格子进行。手机根据「姓名」「居民登记号码」等标签的位置找到对应的格子,把整个格子涂黑。如果先读出字符再只擦掉那些字符,被误读的字符就不会被当作要擦除的对象,而会原样留下。
涂完之后,手机会把结果图像从头再读一遍。只要还能在任何地方读出患者姓名,或者还留有条形码,这张照片就不会发送。只有通过这项检查的图像才会发送。发出去的不是原始照片,而是涂过之后新生成的图像,而且这张遮盖后的照片会显示在画面上,让你看到究竟发出了什么。
到达服务器之后的处理与「PillCheck OCR」中说明的一样:用药品代码查找并附加药品信息,读不出的行保留为「未知」,由用户填写。文字识别结束后,照片不会保存在服务器上。
开发时做出的决定及其理由
第一,拍摄不交给手机自带的相机应用,而是在应用内相机中完成。用自带相机拍摄,照片会留在相册里,而且每拍一次都要离开应用再回来。应用内相机在对准时可以持续读取二维码,所以药袋不用按快门就能完成。同一画面里二维码识别和快门重叠、导致同一个药袋被保存两次的情况也已被防止。
第二,一旦失败就不发送。如果页面不能被明确读成处方、找不到恰好一对带标签的患者姓名和居民登记号码,或者没能完成条形码检查,照片就不会离开手机。画面上会显示「无法安全发送照片。请重新拍摄或直接搜索。」比起发送遮盖不完整的照片,让用户再拍一次更好。
第三,药袋照片不发送到服务器。处方是固定格式,患者信息就在标签旁边;而药袋上的患者姓名没有标签,分散印在好几个地方。测试发现,靠手机读取文字来找姓名的方式无法遮住所有位置。所以药袋以二维码为默认方式。拍摄没有二维码的药袋时,只有手机自己可靠读完整张表时才会记录;否则会提示扫描二维码或直接搜索药品。
第四,遮盖方式与测试该方式的记录绑定成一对。只有获批的遮盖方式与其测试记录相匹配时,应用才会发送照片。测试记录里写着每个遮盖代码文件的指纹。指纹是根据文件内容计算出的唯一编号,哪怕只改一个字也会变。每次修改代码时都会自动运行的检查——自动测试——会把这些指纹与当前代码比对,所以一旦修改遮盖代码,在重新测试并生成新记录之前,测试都会报告失败。这从结构上防止了修改代码的人跳过测试。
处理文件照片时可以带走的做法
PillCheck 扫描中有三点可以用到其他工作上。
第一,在发送之前由发送方遮盖。接收方承诺不保存,与一开始就不让它收到,是两回事。能遮盖的东西,在源头遮盖最可靠。
第二,找要擦除的区域,而不是要擦除的字符。读出字符再擦掉,会把误读的字符留下。以标签这样位置固定的基准整块覆盖区域更安全。
第三,把「遮不住就不发」设为默认。今天可以试一件事:在把处方或合同的照片上传到 AI 聊天或其他服务之前,先在手机的照片编辑里涂掉姓名和号码栏,再把涂过的照片放大,确认没有字透出来。无法确认就不要上传。
下一篇讲点开已记录的药物时打开的药品搜索和药品详情。
