1000块自制表型组半自动检测设备
专题介绍:数据分析那些事儿是瑞典农业科学大学的一名科研工作者。在生物大数据分析领域已经有七年的科研经验。希望通过分享过去7年在国内外硕士、博士、博士后申请、求学、科研、求职、统计学、R&Python编程、生物大数据分析、国内外高校企业求职 生命科学发展对我们当下社会的影响 中收到的个人启发 来让1000个人受益 让求学求职生活变得容易一点点。如果你也想持续学习,克服懒惰的话。关注他参与“100天生信/数据科学自我挑战”的话题吧。
上一篇文章里谈到了如何用50块钱测一个个体全基因组。数量遗传学领域,有了基因组,我们还缺少表型数据,手工测量误差还大非常耗人力,建高通平表型台又不是每家单位都有预算,现有平台没准还需要排长队。今天我们看一看1000块钱的DIY解决方案,这个方案虽然看起来有点寒酸,但是完美兼容组培室、气候室等多种寒酸的场景,可以探究环境变化对于植物表型的影响。
-
什么是表型组
在数量遗传学科学研究中,我们经常要测量很多所研究物种的表型,比如,叶片大小,株高,植物受病害、冻寒胁迫的程度,光合作用强度以及水分生理情况。近些年随着遥感和计算机视觉等领域的发展,我们可以通过RGB,红外,高光谱相机成像后,用软件自动识别这些特征。叶片大小,株高,受病害胁迫的程度,这些性状只需要可见光成像后,截取我们感兴趣的区域并计算像素面积大小,就可以得到。通过固定波长的光去照射植物时候,通过反射光的量,我们也可以计算出当时植物叶片中光合色素的含量,以及水分生理胁迫的程度。
一套表型监测设备,里面有几个点需要解决
1. 传送植物的传送装置。
2. 拍照装置。我们熟悉的表型组平台都是自动化的,定期将所研究植物,传送到拍照处取照片。一般的成像装置与我们的手机相机没有本质的差别,唯一不同的是它需要一个自动控制拍照的控制单元。
3. 图片的保存和传输
由于研究的植物很多,而且在每隔几个小时都拍照,所以需要将拍摄的照片,保存到某个地方,可以是远程的服务器也可以是用于拍摄的本地计算机,但大多数是服务器。
4. 图片的后期处理。
一般通过可见光成像就可以拿到很多物种的株型,叶片大小,夹角等等。这里逻辑其实很简单,一张图片可以分解成多个通道,常用的有RGB,HSV,每个通道的信息都保存在一个矩阵里(矩阵就是一个二维的表,里面每个格子里都有个数字,这个数字就是我们的颜色)。很多情况下通过简单的通道转换,图片中目标性状、物体,的数值会与背景有显著的差异,所以不需要哦复杂的算法,一个阈值截取后,就可以把目标物与背景分开,这个过程叫图像的Segmentation。比如图一中,我们拍了一盆植物,想知道植物的冠层面积,左边是我们的图像,右边是segmentation过后的目标区域。当然这里说的只是Segmentation的最简单的方法和逻辑,有些特殊的表型需要比较特殊的方法去做Segmentation,由于我还在入门,所以不误导大家了。一旦拿到目标物体,后面再去做面积计算或者特征提取就容易的很多。Python里面的Plant-CV就是为这个而生的,很多物种,在Plant-CV主页,Github都有现成的代码,但目前对于一些物种,如园艺作物,花型,株型,都比较复杂,可能需要下点功夫自己优化。
图一,通过Segmentation拿到目标性状
-
预算解决方案
1、 RGB成像
RGB成像,很多拍照设备都可以完成,比如手机(Plant Screen Mobile: an open-source mobile device app for plant trait analysis
https://link.springer.com/article/10.1186/s13007-019-0386-z)。但是手机拍照毕竟不是个高通量的办法,而且参照物不固定,后期我们将像素值转化为空间上的物理距离,也不是特别方便。所以我们期望将相机固定在一个装置上,然后自动控制这个相机,以固定焦距拍照。
2. 自动控制和树莓派
这里我们的控制单元就要出场了—树莓派。树莓派就是一台电脑,有自己的CPU,显卡,内存,运行一个叫Raspbian操作系统(类似linux/unix的内核,所以可以跑很多我们熟悉的软件)。这里我们主要用到的是它的GPIO(通用输入输出信号借口)来接受和传输信号。树莓派(PI,图二左上)目前有几个型号,便宜的50块钱,贵的四五百,感兴趣的大家可以淘宝。
我们DIY表型检测装置的自动控制是通过代码让它的通用输出输入接口在满足一定条件下输出固定电压,来实现的。这个条件可以是按下键盘的某一个按键,也可是传感器的输入,例如当温度或者时间达到某一个数值,当周围有障碍物,当某一个物体移动到固定位置。
图二,树莓派简介
图二左下就是GPIO的放大,不同版本稍微有区别。每个探针(pin)都有独立的一个编号。我们可以用代码控制当达到某一个条件时候,让某一个或者多个pin输出一个固定电压。我们这里需要的是每隔固定时间拍摄一张照片,因为拍照的时候可能我们需要固定波长的光源去照射我们的植物,所以先给大家展示下如何点亮LED光源。图二右边是我们的接线方式,这里我们在第三个pin(接地,类似于负极)和第18个pin连接了一个LED。
我们想通过代码开关这个光源,这里是Python的代码,刚开始写公众号,还没搞清怎么插入代码,大家先对付着看
import RPi.GPIO as GPIO # Python调用 树莓派GPIO管理模块
GPIO.setmode(GPIO.BCM) # 初始化GPIO pin的编码模式
GPIO.setup(18,GPIO.OUT) #设置pin 18为输出信号
print (“LED on”)
GPIO.output(18,GPIO.HIGH) #在Pin 18输出一个高电平,LED会被点亮
time.sleep(1)
print (“LED off”)
GPIO.output(18,GPIO.LOW) #在Pin 18输出一个低电平,LED会熄灭
非常简单,有了光源,我们看成像。
5. 自动成像系统硬件和软件
树莓派有自己的摄像头模块和专用摄像头接口,一个树莓派摄像头50块,另外它也支持usb接口,我们也可以连接自己的相机或者买USB的工业相机,几十、几百、几千不等,但是就我们这里的目的,几十块钱足够解决问题。
这里是如何用代码控制照相(黑色部分是以上提到的LED代码)
import RPi.GPIO as GPIO # Python调用 树莓派GPIO管理模块import os # Python调用python 系统管理模块
GPIO.setmode(GPIO.BCM) #初始化GPIO pin的编码模式
GPIO.setup(18,GPIO.OUT) #设置pin 18为输出信号
print “LED on”
os.system(”raspistill -0 /Desktop/image_name.jpg”) #调用摄像头模块照一张相,并且存储在桌面
GPIO.output(18,GPIO.HIGH) #在Pin 18输出一个高电平,LED会被点亮
time.sleep(1)
print “LED off”
GPIO.output(18,GPIO.LOW) #在Pin 18输出一个低电平,LED会熄灭
这里用的是树莓派自带的摄像头模块,如果是我们自己的外接数码相机,我们可以用另一个开源工具叫做gPhoto2(https://github.com/gonzalo/gphoto2-updater)
只需要把红色那一行代码换成就搞定了。
os.system(”gphoto2 –capture-image-and-download –-filename /Desktop/image_name.jpg”)
-
DIY成像设备
有了以上的核心的控制系统,光源和成像系统。接下来有无限可能。我们可以做个组培室里宏观的如图三A从组培室顶部照植物冠层。我们可以做个台式的如图三B,照种子,果实,得到稍微精细点的表型。我们也可以做个箱式的(图三C),照大植物,拿株高,叶片性状,叶夹角等等。我们还可以做个组配架上的,看根部表型,子叶和下胚轴发育(图三D)。这里不管是什么形式的,只是一个支架作用,可以任意由大家发挥。
图三,来自Jose C. Tovar et al, Raspberry Pi–powered imaging for plant phenotyping 2018,Applications in plant sciences和https://maker.danforthcenter.org/tutorial/raspberry%20pi/led/raspberry%20pi%20camera/RPi-LED-Illumination-and-Imaging
也许机智的你发现,这个需要人工把植物搬到照相设备中,通量还是不够高。没关系。在来两个步进电机+ 两条导轨,几行代码,就可以让我们的相机在X,Y方向移动我们就用1000多的预算,造出来公司卖几十万的这个家伙么(图四)。
图四,高通量检测设备
5.表型组学图像分析
至此,我们假设高通量的拿到了很多图片,图像处理这一块,目前常规表型都有现成的代码,RGB的图怎么办,荧光的怎么办,红外的怎么办,高光谱的怎么办,有现成的资料和分析实例,我这个初学者就不误导大家了,请去Plant CV 主页https://plantcv.readthedocs.io/en/stable/。另外我总结了些图像处理方面的资料,供大家参考。以后如果有兴趣的话,我会逐步写出针对某个物种或者某个表型的具体解决方案和代码。
1. Raspberry powered phenotyping divice
Paper 1: An automated, high-throughput plant phenotyping system using machine learning basedplant segmentation and image analysis
Link: https://github.com/ektf1130/high-throughput-plant-phenotyping-system
Paper 2 Raspberry Pi–powered imaging for plant phenotyping
Link: https://github.com/danforthcenter/apps-phenotyping
2. A python library for plant phenotyping
PlantCV v2: Image analysis software for high-throughput plant phenotyping.
https://github.com/danforthcenter/plantcv
A case study
A Versatile Phenotyping System and Analytics Platform Reveals Diverse Temporal Responses to Water Availability in Setaria.
3. UAV based phenotyping Field lettuce
Paper: combining computer vision and deep learning to enable ultra-scale aerial phenotyping and precision agriculture: A case study of lettuce production
Link: https://github.com/Crop-Phenomics-Group/Airsurf-Lettuce
4. A workshop on tailored image processing for customized phenotype
https://github.com/danforthcenter/phenome2020-workshop
有了树莓派,不光可以做表型检测设备,因为它几乎可以实现一切类似人工智能的装备,比如根据日照自动开窗帘、寒假里自动给植物浇水、给家里或者实验室造一个数据备份的NAS,也可以远程控制我们家里和实验室的一些设备,可以控制一个鱼菜共生系统,重点是价格便宜,1000预算之内几乎都可以解决。。。。。。
未来故事,请扫码关注。拜托各位老师、同学和家长,把它传播给需要的师弟师妹。也欢迎各位师弟师妹,如果想知道或者了解什么方面,请留言互动。我会尽力和身边大佬同仁学习后,努力给大家一个全面的总结。
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!