• [其他] 使用CV2和Keras OCR从图像中删除文本
    介绍本文将讨论如何快速地从图像中删除文本,作为图像分类器的预处理步骤。删除文本可能有多种或多种原因,例如,我们可以使用无文本图像进行数据增强。在本教程中,我们将使用OCR(光学字符识别)检测图像中的文本,并在修复过程中填充照片中丢失的部分以生成完整的图像——以删除我们检测到的文本。处理为了从图像中删除文本,我们将执行以下三个步骤:1.​ 识别图像中的文本,并使用KerasOCR获取每个文本的边界框坐标。1.​ 对于每个边界框,应用一个遮罩来告诉算法我们应该修复图像的哪个部分。1.​ 最后,应用一种修复算法对图像的遮罩区域进行修复,从而得到一个无文本图像。### 实现Keras ocr简介KerasOCR提供现成的ocr模型和端到端训练管道,以构建新的ocr模型(请参见:https://keras-ocr.readthedocs.io/en/latest/).在这种情况下,我们将使用预训练的模型,它对我们的任务非常有效。KerasOCR将自动下载探测器和识别器的预训练权重。当通过Keras orc传递图像时,它将返回一个(word,box)元组,其中框包含四个角的坐标(x,y)。下面是一个快速示例:import matplotlib.pyplot as pltimport keras_ocrpipeline = keras_ocr.pipeline.Pipeline()#read image from the an image path (a jpg/png file or an image url)img = keras_ocr.tools.read(image_path)# Prediction_groups is a list of (word, box) tuplesprediction_groups = pipeline.recognize([img])#print image with annotation and boxeskeras_ocr.tools.drawAnnotations(image=img, predictions=prediction_groups[0])如果我们看一下prediction_groups,我们会看到每个元素对应一组坐标。例如,prediction_groups[0][10]如下:('tuesday',  array(\[\[ 986.2778 ,  625.07764\],         \[1192.3856 ,  622.7086 \],         \[1192.8888 ,  666.4836 \],         \[ 986.78094,  668.8526 \]\], dtype=float32)) 数组的第一个元素对应左上角的坐标,第二个元素对应右下角,第三个元素是右上角,而第四个元素是左下角。#### cv2修复函数使用OpenCV应用修复算法时,需要提供两幅图像:1.​ 输入图像,包含我们要删除的文本。1.​ 遮罩图像,它显示图像中要删除的文本在哪里。第二个图像的尺寸应与输入的尺寸相同。Cv2具有两种修复算法,并允许应用矩形、圆形或线遮罩(请参考:https://opencv24-python-tutorials.readthedocs.io/en/latest/py_tutorials/py_photo/py_inpainting/py_inpainting.html)在这种情况下,我决定使用线遮罩,因为它们更灵活地覆盖不同方向的文本(矩形遮罩只适用于平行或垂直于x轴的单词,圆形遮罩将覆盖比较大的区域)。为了应用遮罩,我们需要提供线的起点和终点坐标以及线的厚度:起点将是框的左上角和左下角之间的中点,终点将是右上角和右下角之间的中点。对于厚度,我们将计算左上角和左下角之间的线长度。import mathimport numpy as npdef midpoint(x1, y1, x2, y2):    x\_mid = int((x1 + x2)/2)    y\_mid = int((y1 + y2)/2)    return (x\_mid, y\_mid)#example of a line mask for the word "Tuesday"box = prediction\_groups\[0\]\[10\]x0, y0 = box\[1\]\[0\]x1, y1 = box\[1\]\[1\] x2, y2 = box\[1\]\[2\]x3, y3 = box\[1\]\[3\] x\_mid0, y\_mid0 = midpoint(x1, y1, x2, y2)x\_mid1, y\_mi1 = midpoint(x0, y0, x3, y3)thickness = int(math.sqrt( (x2 - x1)\*\*2 + (y2 - y1)\*\*2 ))#现在我们可以创建我们的遮罩:mask = np.zeros(img.shape\[:2\], dtype="uint8")cv2.line(mask, (x\_mid0, y\_mid0), (x\_mid1, y\_mi1), 255, thickness)#我们还可以检查遮罩区域,确保其正常工作。masked = cv2.bitwise\_and(img, img, mask=mask)plt.imshow(masked)最后,我们可以修复图像。在这种情况下,我们将使用cv2.INPAINT_NS,指得是“Navier-Stokes, Fluid Dynamics, and Image and Video Inpainting”一文中描述的修复算法。img_inpainted = cv2.inpaint(img, mask, 7, cv2.INPAINT_NS)plt.imshow(img_inpainted)正如你所看到的,“Tuesday”已从图片中删除。
  • [中间件] 【华为云鲲鹏云服务最佳实践】【工具篇】第014期keras2.2.4 安装配置指南
                                             1、简介Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化类别:工具2、基础环境类别子项版本获取地址(方法)华为云华为云虚拟机RC3(916)--OSCentOS7.5Kernel4.14软件包Keras2.2.43、依赖安装安装python3-h5py-2.6.0-7.fc26.aarch64.rpm rpm -ivh python3-h5py-2.6.0-7.fc26.aarch64.rpm(需要依赖,按照提示安装如下依赖包即可)hdf5-1.8.18-1.fc26.aarch64.rpmlibstdc++-9.1.1-2.el7.aarch64.rpm liblzf-3.6-17.fc30.aarch64.rpm python3-numpy-1.13.0-1.fc27.aarch64.rpmpython3-six-1.10.0-5.3.1.noarch.rpm安装python36-scipy.aarch64 yum install python36-scipy.aarch64(需要依赖,按照提示安装如下依赖包即可)yum install -y python36   python36-pip.noarch blas-devel  lapack-devel   atlas-develpython36-numpy-f2py-1.10.4-7.el7.aarch64numpy-1.7.1-13.el7.aarch64 python36-setuptools-39.2.0-3.el7.noarch安装tensorflow请参照《华为云鲲鹏云服务最佳实践TensorFlow1.2.1安装配置指南》安装PyYAMLwget   https://files.pythonhosted.org/packages/9f/2c/9417b5c774792634834e730932745bc09a7d36754ca00acf1ccd1ac2594d/PyYAML-5.1.tar.gzPip3.6 install PyYAML-5.1.tar.gz4、组件编译安装    下载编译安装keras,结果如下图wget   https://github.com/keras-team/keras/archive/2.2.4.tar.gztar -zxvf 2.2.4.tar.gzcd keras-2.2.4/python36 setup.py install    5、系统配置     无6、测试测试内容:查看keras版本号输入python36进入python,输入如下命令import keras as kk.__version__ 测试结果:见下图  7、参考信息http://rpmfind.net/linux/RPM/index.htmlhttps://src.fedoraproject.org/ 8、FAQQ:安装h5py时,yum安装后识别不了,源码编译报错如下,无法构建A:可能是安装版本的问题,建议参照本文所依赖版本安装。Q:相关依赖包已经下载至本地,安装时仍然提示依赖问题?A:可以使用yum localinstall解决相关依赖问题。