首页 理论教育 图像识别应用的相关技术

图像识别应用的相关技术

时间:2023-06-28 理论教育 版权反馈
【摘要】:本节提供一个例子,让读者能够自制一个图像识别的在线应用。搭建一个Shiny应用,实现物体识别。准备就绪之后,浏览器中会出现一个网页应用,就能用本地或在线图片来测试。preproc.image<-function{#crop the imageshape<-dimshort.edge<-minyy<-floor+1yend<-yy+short.edge-1xx<-floor+1xend<-xx+short.edge-1croped<-im[yy:yend,xx:xend,,]#resize to 224 x 224,needed by input of the model.resized<-resize#convert to arrayarr<-as.arraydim=c#substract the meannormed<-arr-mean.img#Reshape to format needed bymxnetdim<-creturn}模型部署读入图像,预处理与预测代码如下:im<-load.imagenormed<-preproc.imageprob<-predictmax.idx<-order[1:5]result<-synsets[max.idx]

图像识别应用的相关技术

其实对于神经网络当前的应用场景而言,识别手写数字已经不足为奇。早些时候,Google公开了一个云API,让用户能够检测一幅图像里面的内容。本节提供一个例子,让读者能够自制一个图像识别的在线应用。

【例9.4】搭建一个Shiny应用,实现物体识别。

(1)加载依赖的包和数据

install.packages("shiny",repos="https://cran.rstudio.com")

install.packages("imager",repos="https://cran.rstudio.com")

现在已经配置好了mxnet、shiny和imager三个R包,下一步则是让Shiny直接下载并运行准备好的代码。

shiny::runGitHub("thirdwing/mxnet_shiny")

第一次运行这个命令会花上几分钟时间下载预先训练好的模型。训练的模型叫Inception-BatchNorm Network,如果读者对它感兴趣,可以阅读相关文献。准备就绪之后,浏览器中会出现一个网页应用,就能用本地或在线图片来测试。

(2)导入预训练过的模型文件

>model<-mx.model.load("Inception/Inception_BN",iteration=39)

>synsets<-readLines("Inception/synset.txt")

>mean.img<-as.array(mx.nd.load("Inception/mean_224.nd")[["mean_img"]])

(3)图像预处理

使用一个自定义函数对图像进行预处理,这个步骤对于神经网络模型而言至关重要。

preproc.image<-function(im,mean.image){

#crop the image

shape<-dim(im)

short.edge<-min(shape[1:2])

yy<-floor((shape[1]-short.edge)/2)+1

yend<-yy+short.edge-1

xx<-floor((shape[2]-short.edge)/2)+1(www.xing528.com)

xend<-xx+short.edge-1

croped<-im[yy:yend,xx:xend,,]

#resize to 224 x 224,needed by input of the model.

resized<-resize(croped,224,224)

#convert to array(x,y,channel)

arr<-as.array(resized)

dim(arr)=c(224,224,3)

#substract the mean

normed<-arr-mean.img

#Reshape to format needed bymxnet(width,height,channel,num)

dim(normed)<-c(224,224,3,1)

return(normed)

}

(4)模型部署

读入图像,预处理与预测代码如下:

im<-load.image(src)

normed<-preproc.image(im,mean.img)

prob<-predict(model,X=normed)

max.idx<-order(prob[,1],decreasing=TRUE)[1:5]

result<-synsets[max.idx]

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈