一、需求来源

因为在编写爬虫程序时,经常会遇到,电话号码使用图片格式显示。程序无法直接拿到其中的电话号码。

二、解决思路

1、拿到该网站从0-9的数字的图片,并将每个图片转换成相应的向量。

2、需要使用python读取图片。

3、将读取出来的图片分割开来。

4、将分割出来的数字图片和已经转换成向量的的图片相比较。如果相等就返回该数值。

三、用到的模块

1、urllib2

2、Image

3、cStringIO

4、os

四、上代码

# -*- coding:utf-8 -*-

import os

from PIL import Image

import cStringIO

import urllib2

class Number2vector(object):

def __init__(self):

#在构造函数时就拿到{'数字':'向量'}的字典。

numdict = self.get_numberdict()

file_path = "phoneimage/phone3.png"

# 这里是将之前已经转换为向量的数字拿到一个字典里面,方便之后的比对。

def get_numberdict(self):

numdict = dict()

path = "numbertxt"

file_list = os.listdir(path)

for filex in file_list:

filex = path + '/' + filex

f = open(filex)

c = f.read()

key = filex.split('/')[1].split('.')[0].replace('m', '')

numdict[key] = c

return numdict

#将图片转换为用0和1表示的字符串

def image2text(self, im):

width = im.size[0]

height = im.size[1]

tmstr = ""

for i in range(0,width):

for j in range(0,height):

cl=im.getpixel((i,j))

if(cl==0):

#黑色

tmstr = tmstr + "1"

else:

tmstr = tmstr + "0"

tmstr = tmstr + "\n"

return tmstr

# 用来比较向量是否相等。如果相等则返回该数字

def get_number(self, im):

text = self.image2text(im)

numdict = self.get_numberdict()

keys = list()

vals = list()

for k, v in numdict.items():

keys.append(k)

vals.append(v)

if text in vals:

i = vals.index(text)

return keys[i]

else:

return None

def splitimage(self,file_path):

region_list = list()

# 判断该文件是本地文件还是web文件。

if "http://" in file_path or "https://" in file_path:

image = cStringIO.StringIO(urllib2.urlopen(file_path).read())

im = Image.open(image)

else:

im = Image.open(file_path)

width = im.size[0]

i = 0

while i < width - 9:

box = (i, 0, i+9, 25)

region = im.crop(box)

i += 9

region_list.append(region)

return region_list

def getimagefromweb(file_path):

file = cStringIO.StringIO(urllib2.urlopen(file_path).read())

def do_main(self, file_path = "phoneimage/phone3.png"):

region_list = self.splitimage(file_path)

strx = ""

for r in region_list:

tmpnum = self.get_number(r)

if tmpnum != None:

strx = strx + tmpnum

return strx

file_path = "这里填写你的图片路径"

n = Number2vector()

print n.do_main(file_path)

五、备注

在之前准备工作中,我为了拿到准确的{"数字":"向量"}的键值对。需要多次进行比较。并且要拿到该网站中从0-9所有的数字。

念数字python_我是怎样利用python PIL将图片数字读出来的?相关推荐

  1. python对excel筛选提取文本中数字_详解利用python提取pdf文本数字

    之前也不乏介绍过关于excel的内容,日常工作应用,除了excel,pdf也是经常使用的一种,关于pdf的文本提取,下面也来详细介绍~ 说明:从pdf文件中提取其他类型的数据,如文本或图像.将说明从p ...

  2. python提取pdf的数字_详解利用python提取pdf文本数字

    之前也不乏介绍过关于excel的内容,日常工作应用,除了excel,pdf也是经常使用的一种,关于pdf的文本提取,下面也来详细介绍~ 说明:从pdf文件中提取其他类型的数据,如文本或图像.将说明从p ...

  3. 教你一招利用Python快速去除图片水印

    大家好,我是IT界搬运工. 相信大家都有在网上下载好图片但是有水印的烦恼,那么问题就来了:看到心爱的图片想要"占为己有".怎么把图片上的水印去除呢?今天我就来教你一招利用Pytho ...

  4. 一、python+PIL给图片添加文字水印

    python+PIL给图片添加文字水印 最近需要给同一张图片添加不同的水印保存,在网上搜了很多,也不是很有效,在这儿记录一下我运行正确无误的代码,方便自己以后查看: #读取文件每一行,写到图片中间位置 ...

  5. 苹果手机怎么学python_我是如何在 Python 内使用深度学习实现 iPhone X 的 FaceID 的...

    雷锋网按:本文为 AI 研习社编译的技术博客,原标题 How I implemented iPhone X's FaceID using Deep Learning in Python,作者为 SHI ...

  6. 利用Python脚本给图片批量添加文字水印

    引言:本人从小白自学python,为了测试基础学习效果,增加一定的促进,想通过参加全国计算机等级考试二级python来检验基础学习情况.在学习过程中,会将该过程编写的python小程序题目在此发表,希 ...

  7. Python PIL调整图片大小、尺寸和转换图片格式,removebg改变图片背景、透明化处理

    1.简介:Python利用PIL Image可以调整图片尺寸(宽度和高度).图片大小和转换图片格式,Python利用removebg可以改变图片背景.透明化处理. 2.特点:简单方便.快速. 3.适用 ...

  8. python数字判断规则_判断Python输入是否为数字、字符(包括正则表达式)-阿里云开发者社区...

    当键入字符串时候,我们自己就可以判断了! 一:我们在程序把输入的数字当字符串处理 import re print("我现在要写一个文件数字猜游戏数字游戏:") temp=input ...

  9. python数字形式转换_在Python中将字母转换为数字

    在Python中将字母转换为数字 如何完成以下步骤? characters = ['a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''t''u ...

最新文章

  1. bzoj 4602: [Sdoi2016]齿轮
  2. 数学课本上的几大变态之处
  3. 数字转字符函数_Excel之文本函数CONCATENATE/TEXT/LEFT/MID/RIGHT/FIND/LEN
  4. Spring 4.1和Java 8:java.util.Optional
  5. oracle11g dataguard物理备库搭建
  6. ICCV 2019 | 厦大提出快速NAS检索方法,四小时搜索NN结构
  7. 裁员下老公老婆的对话
  8. 洛谷 P3110 [USACO14DEC]驮运Piggy Back spfa
  9. Excel的25个知识~边看边操作
  10. Opencv入门第一课打开窗口
  11. java便签_Java版本便签纸小项目
  12. 计算机应用1.2版,201303《计算机应用基础》在线作1_2.doc
  13. 神经网络模型结果怎么看,神经网络模型怎么评估
  14. 运维标准化与流程化建设深度指南(转)
  15. c语言%.6s和%6s的差别,iPhone 6s与iPhone 7的差别 看完全懂了!
  16. android扫雷需求分析,扫雷需求分析.doc
  17. Git问题:右键没有Git Bash Here的解决办法
  18. MMDetection2.17-权重模型转推理模型(pth转onnx)详细步骤及前向推理(Win10、Linux均适用)
  19. Lattice FPGA ecp5u mico32软核使用
  20. 大数据时代的知识图谱

热门文章

  1. 利用lrz、lsz工具在linux与windows之间传输文件
  2. Dos批处理常用命令大全扫盲篇
  3. 求最大素数的c语言,for语句计算输出10000以内最大素数怎么搞最简单??各位大神们...
  4. php glod,基于PHP的黄金价格示例代码-六派数据
  5. json带斜杠java,带斜杠的json解析
  6. android自定义push通知_android通过自定义toast实现悬浮通知效果的示例代码
  7. 沈阳工程 c语言题库,2017年沈阳航空航天大学航空航天工程学部823C语言程序设计考研仿真模拟题...
  8. Codeforces - 961E Tufurama
  9. [转载]宇宙文明等级的划分标准
  10. [LeetCode] 86. Partition List Java