js 从图片获取 10 个色块,再对照试纸的比色卡,读取色块对应的数值,求思路

2022-04-22 00:16:50 +08:00
 v2mo

有个需求:

尿检有那种试纸,比如,一个试纸条,上面有 10 个测试项目(矩形小纸片贴在试纸上,有间隔),尿液侵泡几十秒后,就能读取数值了。

现在要把整套程序化,自动识别数值。

因为程序运行环境限制,js 实现最好。

这似乎是 CV 计算机视觉领域的问题,难道要用 opencv 。

感觉好难。有大佬能接吗?(可外包,有偿)

给个思路也行。

目前我想到的难点: 1 、从扫一扫那样的照片帧中,一帧一帧的识别图片

2 、一个图片帧中,识别出 10 个色块,有点麻烦

3 、试纸是湿的,颜色肯定会溢出矩形,对程序识别造成麻烦

4 、取得的颜色,在比色卡中,如何解读出他对于的数值,好难。。。

1646 次点击
所在节点    程序员
8 条回复
ch2
2022-04-22 00:22:45 +08:00
直接深度学习,图片数量够多,打标训练很简单的事,就是 n 分类
v2mo
2022-04-22 00:24:38 +08:00
raycool
2022-04-22 00:41:52 +08:00
直接 CNN 一把梭
7gugu
2022-04-22 00:46:15 +08:00
看看 opencv.js ,它们官网提供了一部分的 demo ,你可以参考一下
mikumkf
2022-04-22 00:54:29 +08:00
这个不需要用到任何的 CV 知识吧?视频就是图片,调用摄像头获得某一帧就好了,识别色块也简单,如果能限制试纸的放置位置直接拿图像对应的地方矩阵就好了 ,颜色的话把读到 RGB3 通道转到 HSL 空间和比色卡算数值差,设定一个 threshold 就可以了。如果不能限制试纸的位置,用读到的整张图片转化色彩空间到比色卡的空间范围内做 Clip 然后算最大的面积。 拿 JS+Canvas+Camera API 就行,可能这里唯一的问题是怎么保证 Camera 读到的颜色偏色不太大,可以考虑在拍的时候用一个亮的白光灯打着。
rabbbit
2022-04-22 10:22:26 +08:00
tensorflow.js?
测颜色估计要看试制质量和拍照环境.
拿新冠的那个抗原测试棒为例, 没干的时候肉眼看着都费劲,色差非常小.
还有大量干扰,例如滴多了会有不规则条纹 或者有人把自己鼻子捅漏了.
rabbbit
2022-04-22 10:22:52 +08:00
试制 -> 试纸
weiwoxinyou
2022-04-22 13:09:59 +08:00
CNN 不背这个锅,深度学习需要大量数据进行训练,不适合这个场景。
@mikumkf 的方案个人认为更可行,再补充一下细节问题:
1. 针对视频,可以设置识别图像上限,一个视频也就识别10张可能比较合适。
2. 确定试纸形成的颜色范围,需要考虑手、背景的影响,控制识别矩形框在一定的范围比较合适。
3. 针对识别结果不同,建议选择连续识别一致的结果,如前8结果 A 后2结果 B 可以考虑丢弃后2的识别结果,如果间歇识别不同结果,建议同时给出。
4. 用识别的矩阵减去由色卡组成的同样大小的矩阵,色差最小的即为识别结果。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/848470

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX