精华内容
下载资源
问答
  • python 图片转文字灰度图

    千次阅读 2018-07-04 15:45:02
    4.打开cmd窗口,输入命令 python 1.py 1.png (后两项分别是py文件名和图片名) 5.关闭程序,打开放图片的目录,发现会多出来一个output.txt文档,打开,把字体调小即可看到文字图   原图(1920*1080):...

     

    from PIL import Image
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('file')     # 输入文件
    parser.add_argument('-o', '--output')   # 输出文件
    parser.add_argument('--width', type=int, default=100)  # 输出字符画宽,自己改图片比例
    parser.add_argument('--height', type=int, default=100)  # 输出字符画高
    args = parser.parse_args()
    IMG = args.file
    WIDTH = args.width
    HEIGHT = args.height
    OUTPUT = args.output
    ascii_char = list("魔吧打王大工人一")    # 可自定义字符种类,但注意灰度要递减
    
    
    def get_char(r, g, b, alpha = 256):
        if alpha == 0:
            return ' '
        length = len(ascii_char)
        gray = int(0.2126 * r + 0.7152 * g + 0.0722 * b)    # 灰度参数,这个适用于二次元图片,其他请自行调参
    
        unit = (256.0 + 1)/length
        return ascii_char[int(gray/unit)]
    
    
    if __name__ == '__main__':
        im = Image.open(IMG)
        im = im.resize((WIDTH,HEIGHT), Image.NEAREST)
        txt = ""
        for i in range(HEIGHT):
            for j in range(WIDTH):
                txt += get_char(*im.getpixel((j,i)))
            txt += '\n'
        print(txt)
        if OUTPUT:
            with open(OUTPUT, 'w') as f:
                f.write(txt)
        else:
            with open("output.txt", 'w') as f:
                f.write(txt)

     

    操作步骤:

    1.下载pycharm和sdk,按照百度教程配置环境变量。

    2.下载pip包,pillow包。

    3.把该代码的py文件和要转化的图片放在电脑C盘用户名目录下

    4.打开cmd窗口,输入命令   python 1.py 1.png    (后两项分别是py文件名和图片名)

    5.关闭程序,打开放图片的目录,发现会多出来一个output.txt文档,打开,把字体调小即可看到文字图

     

    原图(1920*1080):

    效果图(384*216):

    放大:

    再放大:

    展开全文
  • 使用python编写,实现将图片转换成相似的文字图案。生成的文本大小可以更改,程序定义四个参数:转换的图片地址 宽 高 生成的目标文件地址。
  • Python | 图片转文字

    千次阅读 2019-04-01 15:24:08
    利用Python进行转换4.1  导入相应的库4.2  设置百度云的API相关参数4.2.1  如何获取上述API的相关关键参数?4.3  定义读取图片函数4.4  单独转换...

    1 背景

    现在需要分析大众点评网站的评论,进行情感分析,主题模型等等,所以第一步是进行爬虫,现在这部分工作已经完成(后面会总结利用Python进行爬虫)但是在爬虫的过程中发现了一个问题,就是点评网站上评论中会有部分是文字被替换成了图片,所以直接爬取评论下来就会出现信息不全的情况,这时候我们采用的方法是什么呢?

    • 第一步是使用截图的方式把评论给截下来!
    • 第二步是利用Python将图片转为文字!

    今天我们主要探讨的就是第二部分!如何将图片转为文字呢?

    2 数据概况

    那我们现在的数据是怎么样的呢?一个文件夹代表一个商家
    在这里插入图片描述

    每个文件夹下面呢?分别是这个商家对应的所有评论的截图!
    在这里插入图片描述

    3 需求

    现在的需求就是将每一个商家所有的评论图片全部转为文字,最后希望能形成一个DataFrame,有三列:

    • 一列是文件夹名称,也就是对应商户号
    • 一列是所有图片的全名
    • 一列是转为的文字的列

    4 利用Python进行转换

    4.1 导入相应的库

    import time
    import pandas as pd
    import json
    import random
    from aip import AipOcr
    import os
    

    4.2 设置百度云的API相关参数

    # 连接api
    APP_ID = "15433908"
    API_KEY = "tcHjIKc51txVe73RNA2Pt7pY"
    SECRET_KEY = "08OvI17ZHWt6Q9PoL4o885LXxRFvdSLG"
    client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
    
    # 返回值设置
    options = {}
    options["language_type"] = "CHN_ENG"
    options["detect_direction"] = "False"
    options["detect_language"] = "False"
    options["probability"] = "False"
    

    4.2.1 如何获取上述API的相关关键参数?

    这就有一个问题了,如何设置百度云的相关API参数呢?

    • 首先注册登录百度云(网址:https://login.bce.baidu.com),

    • 然后找到下面这个东东:
      在这里插入图片描述

    • 然后创建一个项目
      在这里插入图片描述
      还可以看到今天我也使用了其中的一个项目 并且调用了接近3000次,也就是转换了这么多的图片!

    • 进入界面后填写相关信息,点击创建即可!
      在这里插入图片描述

    • 创建完毕之后,点击查看详情
      在这里插入图片描述

    • 然后就会看到下图了,重要的三个参数就可以获得!
      在这里插入图片描述
      然后把上述参数换成自己的就ok啦!注意一天免费使用50000次~

    下面就愉快的调用API啦~

    4.3 定义读取图片函数

    # 读取图片函数
    def get_file_content(filePath):
        with open(filePath, 'rb') as fp:
            return fp.read()
    

    4.4 单独转换图片的内容

    4.4.1 看共有多少文件夹

    # 读取评论信息下面所有文件夹的名称
    mer_folds = os.listdir('./评论信息/')
    print('文件夹下面共有 %d 个商户的评论图片' % len(mer_folds))
    mer_folds[:5]
    
    文件夹下面共有 138 个商户的评论图片
    
    
    
    
    
    ['68045603', '76936090', '23060131', '66264063', '95358955']
    

    4.4.2 看评论图片

    os.listdir('./评论信息/76936090')
    
    ['39018468.jpg']
    

    4.4.3 打印这个图片的内容

    get_file_content('./评论信息/76936090/39018468.jpg')
    
    b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00C\x00\x08\x06\x06\x07\x06\x05\x08\x07\x07\x07\t\t\x08\n\x0c\x14\r\x0c\x0b\x0b\x0c\x19\x12\x13\x0f\x14\x1d\x1a\x1f\x1e\x1d\x1a\x1c\x1c $.\' ",#\x1c\x1c(7),01444\x1f\'9=82<.342\xff\xdb\x00C\x01\t\t\t\x0c\x0b\x0c\x18\r\r\x182!\x1c!22222222222222222222222222222222222222222222222222\xff\xc0\x00\x11\x08\x00\x18\x02\xee\x03\x01"\x00\x02\x11\x01\x03\x11\x01\xff\xc4\x00\x1f\x00\x00\x01\x05\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\xff\xc4\x00\xb5\x10\x00\x02\x01\x03\x03\x02\x04\x03\x05\x05\x04\x04\x00\x00\x01}\x01\x02\x03\x00\x04\x11\x05\x12!1A\x06\x13Qa\x07"q\x142\x81\x91\xa1\x08#B\xb1\xc1\x15R\xd1\xf0$3br\x82\t\n\x16\x17\x18\x19\x1a%&\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\x83\x84\x85\x86\x87\x88\x89\x8a\x92\x93\x94\x95\x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xff\xc4\x00\x1f\x01\x00\x03\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\xff\xc4\x00\xb5\x11\x00\x02\x01\x02\x04\x04\x03\x04\x07\x05\x04\x04\x00\x01\x02w\x00\x01\x02\x03\x11\x04\x05!1\x06\x12AQ\x07aq\x13"2\x81\x08\x14B\x91\xa1\xb1\xc1\t#3R\xf0\x15br\xd1\n\x16$4\xe1%\xf1\x17\x18\x19\x1a&\'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x92\x93\x94\x95\x96\x97\x98\x99\x9a\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xff\xda\x00\x0c\x03\x01\x00\x02\x11\x03\x11\x00?\x00\xf7)\xb5{+y\xee\xe2\x9a`\x86\xd2\x01q9 \xedD;\xb0I\xff\x00\x807\x1dx\xa7\xe9\xda\x85\xbe\xa9d\x97V\xc5\x8clJ\x95u*\xc8\xc0\xe0\xab)\xe4\x10A\x04\x1a\xe0\xe7\xd3\xe7\x83S\xd6&\x9e\xfe[\x99\x06\xa9h|\xa6\x00G#\xc8b\x08\x08\xeb\xb5\x018\x19\xc7s\x92+c\xec\xc6[\xbf\x14]%\xb3]\x15\x94\xdb\x1d<m\xf2\xae\xbfq\x13.\xf0x\xceX\x82x\xc8\xeb\x9c\nL\x0b\xf3\xf8\xcbG\xb6\xd2\xedu\t\xe5\x928.\xae\x9a\xd6<\xa6X\xb2\xb3+\x12\x07E\x1bI\'\xd2\xad\x0f\x12i\x0f\xa7G\xa8Gx\xb2\xdaH\xe5\x12X\x91\x9c\x16\x19\xc8\xf9A\xf45\xe3\xda7\x87\xf5\x18t\xdd*\xda\x1b\x08^\xe6y.\x1do\xb4\xc0\xb1\xdd\xc3\xe5K\x87\x0b\xbd\xd1\x06N\x06\xfc\x92T\xed\xdb\x81]\xa6\x95w\xa9\xd9\xfc7\xba\x8eH~\xc9%\x94\xff\x00fF\xb7\xff\x00\\\xdbe\n\xec\xca\x0b\x00\xe4\xee\xce\x19\xb2I=\xe9\xaf\xeb\xf0\x07\xa7\xf5\xeat\xd2x\xc3C\x89\x0b\xc9x\xe8\xa3\xab5\xbc\xa0\x7f\xe85xk\x16\x1b\xa1V\xb9T\xf3`k\x842\x02\xa3\xcbR\xa0\xb1$q\xcb\xaf\x07\x9ek\x8f\xbbk\x96\xd3u\x90[Sk ,\xfc\x93\xa8#+o\xf3\x8e\xfcn\x00\xe3\x1b+O^\xbd\xd3\xad|[f\x9a\x93\xa1\x86m2\xea#\tR\xe6]\xd2C\xf2\x84\x00\x96$\x03\xc0\x07\xa1\xa0\x0e\x8ak\xe8-\xef-md\'\xcd\xb9,#\x00u\xda2s\xe9\xc5d\xb7\x8c\xf48\xf5&\xb1\x9a\xe6XeVt\xdf-\xb4\x89\x19*H8\x90\xae\xd3\xc8#\xaf^:\xd6E\x85\xc5\xb4>,\xd34\xd5\x9e\xe2{m>\xdekx\xeef\xe4\x19\xdfk,%\xbb\xba\xc4\xa7\xaf<\xf3\xcd`_5\xdaj\xf35\x8c\xef\x1b\xc9x\x913\xcdh$\x85\x1b\xed\xec\x14|\xc3\x0cO\x98_\n\xc1\x81\x8cr(Wn\xc8}\x1b;\xad\x1b\xc5\xba&\xbfq$\x1au\xf4sJ\x8c\xe3`\xea\xc1H\x05\x87\xaa\xe4\xf5\xa2o\x16\xe9\x10G\xe6I%\xd7\x95\xbd\x93\xccK9\x9d\t\x0eS\xef*\x91\xf7\x86\x07<\xf1\xea+\xcf|\t\x06\xaa\x9a\xac\xdaQ\xd4\xe7\x8d\xe4\xb0\xb9e\x90\xc8X\x163\xa8\xf3\xbc\xb33\x80\xc7,A\xda\x9c\x93\xc3rj\x9d\xed\x93\xc9\xa6\xe8\xb1y>s\\i\xba|v\xeaV6fa3o\xc6\xf6\x07?:\xe7\x19\xff\x00k\x03\x9amh\x9fqug\xaa\x9f\x10\xe9\xc9b\xd7\x92=\xc40+\xec&kYc9\xc6~\xeb(8\xc7|b\x96\xcf_\xd3\xef\xda\xd8[\xbc\xc7\xed;\xbc\x93$\x0f\x18p\xa0\x12F\xe020\xc3\x07\xa1\xed\\\xa7\xd8n\xf4\xcf\x0c\xb5\xa4\xf0\xdfE=\xe5\xf3\xa5\xbc\x16\x92E\x19;\x90\xe07\xcd\xb4/\xcax\x06\x99\xe1\xc1$:\xb6\x8fe8\xbdK\x9b\x11-\xb4\xf1\xddJ\xae\x15\x84\x117\xc8T\x91\xb7\x0e)\x01\xda_j\xf6:d\x88\x97\x93\xf9%\xd1\xddK)\xc1\x082\xc0\x1cc8\xc9\xc7R\x01\xc0\xe0\xd5(\xfcW\xa4\xc9,q\x86\xbdC#\xa4j\xd2i\xf3\xa2\xeer\x02\x82\xcc\x80\x0c\x92\x00\xc9\xefX^/\xd4c\x8a\xdd.\x97T\xcd\x85\xe5\x95\xca\x88\xd8\xa7\x94H\x88\xed*q\xbb$\x9f_\xc2\xb9\xabr\x06\xbc\xdf\xbc\x1ed\xb7\x96\xe1\xd3\xb8\xf2\xaf!C\x91\xe6\x12\xb9/\xc6G8\xe3\x14\x01\xe8\xef\xe2=!d\xb8\x89o\x16Y\xad\xf3\xe6\xc5\x02\xb4\xb2.\x18)\xf9T\x12pH\x07\x03\x8a\x93N\xd6\xecuY\xe6\x82\xd5\xe6\xf3aUy\x12ky"!X\x90\xa7\x0e\xa3 \xedn\x9e\x86\xbc\xfa\xe2\xea\xda\xe2{\xed>;\xc8\x04\xe6=V\x19S%\xcca\xee\xe3\xe1\x95\x01a\x95\xce8\xae\x87\xc3\xda\x8d\xd5\xcf\x8a\xae^u\xb6e\xbd\xb5,\xad\x0f\x98\x0c~IA\xb4\x87U<\xf9\xc4\xe6\x80:\x1dO\\\xd34c\x00\xd4/a\xb7\xf3\xdc"y\x8e\x17\'\xd7\x9e\xdd9\xed\x91U\x1f\xc6>\x1c\x8e\xf9l\xdb\\\xd3\xc4\xa5X\xff\x00\xc7\xca`\x15 \x15\'<6ON\xbc\x1fJ\xc7\xf1\xeb\xde\x85\xd3\xe1\xb3\x95\xd0\xdd;[0KV\x94\xb0q\xf3c\x0e\xb8!C0\xe0\x9f\x97\x829\xae^\xf6\xefR\x8f\xc6P\xac\xb3O\xe6oh\xcd\xda]\xbcp\xc7\xbaH\x0e\xd2\x9c\xed\x18*\xa5rF]rx\xa0\x0fJ\x97_\xd2`\xbe6R\xea6\xc9t\xb9\xccM \x0c07t\xfasQ\xe9^$\xd25\xb9\x0cv\x17\xb1\xcb(\xde|\xb0~b\xaa\xdbKc\xfb\xb9\xc6\x0f\xa1\x1e\xb5\xcb\xf8\x9a\xe1\xbf\xe1*\x8e\xc2{\xe4\xfb\x1f\x95-\xd02p-\xe50I\x1a\xa360\x15\x81w\x19\xe7(\xde\xa2\x99\xe1\x8b\xc0\xba\xe5\x91\xdbo*H\x8dj\x86\xda\xecJ\xb11\x8c;\x921\xfcF\x10x\xc0\x1e\x99$\xd0\x07\xa0QP\xc1wmt\xd2\xad\xbd\xc42\xb4M\xb2A\x1b\x86(\xde\x87\x1d\rI,\xb1\xc3\x13\xcb+\xacq\xa0,\xce\xc7\x01@\xeaI\xed@\x0e\xa2\xa3\x82xnaI\xa0\x95%\x89\xc6U\xe3`\xca\xc3\xd8\x8e\xb4\xdb\x9b\xbbk5F\xba\xb8\x86\x05v\x08\xa6W\n\x19\x8f@3\xde\x80&\xa2\x8a\x84\xdd\xdb-\xda\xda\x1b\x88E\xcb.\xf1\tq\xbc\xaf\xae\xde\xb8\xa0\t\xa8\xa2\xa1\x82\xee\xda\xe9\xa5[{\x88eh\x9bd\x827\x0cQ\xbd\x0e:\x1a\x00\x9a\x8al\xb2\xc7\x0cO,\xae\xb1\xc6\x80\xb3;\x1c\x05\x03\xa9\'\xb56\t\xe1\xb9\x85&\x82T\x96\'\x19W\x8d\x83+\x0fb:\xd0\x04\x94QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00\x14QE\x00g\xb6\x89b\xfa\x89\xbex\x8bO\xe7,\xdc\xb9\xdb\xbdS`8\xe9\xc0?\xd6\xac[\xd9\xc3k-\xd4\xb1)\x0fs/\x9d)\'9m\xaa\x99\xf6\xe1\x16\x8a(\x03.O\x08\xe8\xb2\xc3k\x0b\xdbHR\xd5\xa5x\x80\x9eE\xc1\x91\xb7?!\x819>\xb5\x7fK\xd2\xac\xf4k?\xb2X\xc6\xd1\xc3\xe6<\x9bY\xd9\xce\xe6%\x89\xc9$\xf5&\x8a(\x07\xa8\xcdKF\xb6\xd5^#t\xf7\x068\xd87\x94\x932#\x90\xc1\x86\xe5\x07\xe6\xe4\x0e\xb5jkXn\x03\xefO\x99\xa31\x99\x14\xedp\xa7\xa8\x0c9\x1f\x81\xa2\x8a\x00\xac\x9a&\x9b\x1e\x9d\x0e\x9f\x1d\x9cik\x0b\xac\x91\xc6\x9cme`\xc1\xb29\xceFs\xdf\xbfZ\xafw\xe1}\x1a\xfe4\x8e\xf2\xc9n#G\x96EIX\xb2\x87\x90\xeef\x00\x9f\xbd\x92pz\xaeN1E\x14\x00i\xbe\x1a\xd3\xb4\x9b\xbf\xb4\xda\x9b\xdf3iLM}4\xab\x8f\xf7]\xc8\xfd*!\xe1\r\x14\xc7\x0cr\xdb<\xe9\x04k\x1c\x0b4\xce\xc2\x10\x00\x00\xa0\xce\x15\xb8\xfb\xc3\x07\xde\x8a(\x02I<3\xa7\xcfh\xb6\xb7\x06\xee\xe2\x14\x98L\x82k\xb9\x1c\xab\x00@\xc3\x16\xdd\x8eOz\x88xCG@|\xa8\xeeao8\xce\x1e+\xa9Q\xc3\x14T?0l\xe0\xaa\xa8\xc6q\xc5\x14P\x05\xa9\xbc=\xa4\xdci\xf6\xf62\xd9F\xf6\xf6\xf1\xf9P\xa9\xc9(\x98\x00\x80z\xf2\x06\x0f\xa8\xcez\x9a\x92\xf3G\xb3\xbe\x9e\xdeY\x91\xb3\x04\xa2P\x11\xca\x86`C)`>\xf6\x08\x04g\xb8\xa2\x8a\x00\xb3\x1d\xa5\xb4/\xbe+x\x91\xf2\xe7r\xa0\x07\xe6;\x9b\xf3<\x9fSU,tKK\x0b\xb9.\xe3k\x89n$]\x86K\x8b\x87\x94\x85\xcev\x8d\xc4\xe0g\xd2\x8a(\x02\xc4\x966\xf2\xdf\xc3{"\x16\x9e\x05e\x88\x968]\xddH\x1d3\x8e3\xd7\x19\x1d\xea\xb3h\x1ac\x80\xa6\xce?(C,\x06,|\x85$eg\xc8\xeeIPs\xf5\xa2\x8a\x00\xb1\x16\x9bg\x0bL\xc9n\x9b\xa6\x94L\xe5\x86\xe2\\\x00\x01\xe7\xd0(\xc7\xa68\xa6\x1d.\xdd\xb5A\xa8\xbbL\xf3\xa8"0\xd2\xb1H\xf20J\xaep\t\x1d\xf1\xeb\xeah\xa2\x80\x12\xc3I\xb5\xd3e\x9aKp\xfb\xa5\x01N\xf7-\xb5Ab\x14g\xa0\x05\xd8\xfe?J\xb1wk\x15\xf5\xa4\x96\xd3\x82c\x90`\xe0\x90~\xa0\x8e\x86\x8a(\x01\xb6VqXZ\x8bxw\x15\x0c\xceK\xb6K31f$\xfa\x92I\xfcj\x1dOI\xb5\xd5\xa3X\xee\x83\xe1C\x0f\x91\xca\xe5Xa\x94\xe3\xb1\x1c\x1a(\xa0\x0b\xd5E\xb4\x9bW\xd5\x13Q!\xfc\xe5;\x80\xdev\xee\nT6=v\xb3\x0f\xc7\xe9E\x14\x01z\xa8\xd8i6\xbal\xb3In\x1ft\xa0)\xde\xe5\xb6\xa8,B\x8c\xf4\x00\xbb\x1f\xc7\xe9E\x14\x01b\xee\xd6+\xebI-\xa7\x04\xc7 \xc1\xc1 \xfdA\x1d\r6\xca\xce+\x0bQo\x0e\xe2\xa1\x99\xc9v\xc9ff,\xc4\x9fRI?\x8d\x14P\x05\x8a(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80\n(\xa2\x80?\xff\xd9'
    

    4.4.4 如何看到图片呢?

    from PIL import Image
    im = Image.open('评论信息/76936090/39018468.jpg')
    im.show() # show完之后会新打开一个窗口 显示图片的内容
    

    4.4.5 单独测试看图片的内容

    4.4.5.1 单个文字

    image = get_file_content('评论信息/76936090/39018468.jpg')
    tag1 = client.basicGeneral(image, options)
    tag1
    
    {'log_id': 6412010709116467009,
     'words_result': [{'words': '价格可以随便乱调吗辣'}],
     'words_result_num': 1}
    
    tag1['words_result'][0]['words']
    
    '价格可以随便乱调吗辣'
    

    4.4.5.2 多文字

    image = get_file_content('评论信息/83588699/50366237.jpg')
    tag2 = client.basicGeneral(image, options)
    tag2 
    
    {'log_id': 4713844365475263073,
     'words_result': [{'words': '招牌挺文艺小清新的不知道为什么没人拍过来'},
      {'words': '这家有瘦肉丸卤味啊盖浇饭这些'},
      {'words': '点了瘦肉丸挺好吃的肉没有添加剂的味道还不错的'},
      {'words': '打包了鸭骨架老板还贴心的给切成块味道也很好'},
      {'words': '尤其是酱油醋很好吃'},
      {'words': '就在新城那个叫什么源路的贝贝佳对面门面有点小但是仔细看不会错过的'},
      {'words': '收起评论入'}],
     'words_result_num': 7}
    
    im2 = Image.open('评论信息/83588699/50366237.jpg')
    im2.show() # show完发现评论是有多行的 所以根据这个API调用是一行一行的解析 并存储
    
    for i in range(len(tag2['words_result'])):
        print(tag2['words_result'][i]['words'])
    
    招牌挺文艺小清新的不知道为什么没人拍过来
    这家有瘦肉丸卤味啊盖浇饭这些
    点了瘦肉丸挺好吃的肉没有添加剂的味道还不错的
    打包了鸭骨架老板还贴心的给切成块味道也很好
    尤其是酱油醋很好吃
    就在新城那个叫什么源路的贝贝佳对面门面有点小但是仔细看不会错过的
    收起评论入
    

    结论:

    • 可以看到返回的是一个字典,然后针对单个文字以及多文字的时候得采用不同的方式
    • 多文字的时候得进行一个循环遍历所有的评论 然后拼接起来 这是一个坑!之前就是不清楚的!所以会发现,诶,评论为啥是不全的!所以还是得深入的了解到数据结构!要知道返回的结果是啥!

    4.5 批量的去转图片为文字,并且存在数据框里

    思路:

    • 方法还是上面单个测试的一样,但得需要新增两部分,也就是读取图片 + 存储到数据框的部分
    • 读取图片:进行一个循环遍历即可!

    步骤:

    1. 遍历每一个文件夹 然后对文件夹下面的图片做转换
    2. 由于原来是形成一个字典 最后再形成数据框 现在估计这样够呛了 每次一个文件夹内转完就形成一个数据框 最后合并起来
    3. 这样每次就都定义一个新的空的字典
    4. 同时多加一列:商户号 最后再添加,先增加每一行都不一样的内容,最后再增加所有的!都是这个思路
    5. 定义一个空列表 用来存放每一个商户的三列信息

    合理避坑:

    • 就是注意mac会出现那个啥’.DS_Store’ 所以先把这个给排除掉
    • 注意区分continue和break
    # 读取评论信息下面所有文件夹的名称
    mer_folds = os.listdir('./评论信息/')
    
    comment_dp = []
    t0_all = time.time()
    
    for i in range(0, len(mer_folds)):
    
        fold = mer_folds[i]
    
        print('正在转换第 %d 个商家' % (i+1))
        t0 = time.time()
        # 定义一个空的字典 用来存放图片名称+转换后文字的内容
        image_tag = {}
        # 定位到某一商户对应的所有评论信息图片的文件夹里面
        if fold == '.DS_Store':
            continue
        else:
            pics = os.listdir('./评论信息_补充/' + str(fold))
            for pic in pics:
                # 针对mac系统的隐藏文件
                if pic == '.DS_Store':
                    continue
                else:
                # 遍历某一商户下所有图片
                    print('正在转换商家 %s 评论图片: %s' % (fold, pic))
                    try:
                        image = get_file_content('./评论信息_补充/' + str(fold) + '/' + str(pic))
                        tag = client.basicGeneral(image, options)
                        # 先定义一个空的字符 用于后面的拼接
                        comments = ''
                        # 进行判断 如果只识别出一个来 就直接赋值
                        if tag['words_result_num'] == 1:
                            image_tag[pic] = tag['words_result'][0]['words']
                        # 如果不止一个 进行循环 然后拼接评论
                        else:
                            for i in range(tag['words_result_num']):
                                comments = comments + tag['words_result'][i]['words'] + ' '
                            image_tag[pic] = comments
    
                        time.sleep(1)
                    except Exception as e:
                        print('报错信息为: ', e)
          
    
        # 此时一个商家的图片全部转换ok
        t1 = time.time()
        print('点评商家 %s 所有评论图片转换完毕, 所需时间为 %.2f s' % (str(fold), (t1 - t0)))
        # 先把这部分数据给存起来 形成数据框
        a = []
        b = []
        for k,v in image_tag.items():
            a.append(k)
            b.append(v)
        y = pd.DataFrame({
            '点评评论截图名称':a,
            '百度识别评论结果':b
        })
        y['商户号'] = fold
        comment_dp.append(y)
        
        # else:
        #     break
    
    # 输出所有的信息
    comment_dp_pd = pd.concat(comment_dp, axis=0)
    comment_dp_pd.to_csv('大众点评评论图片转文字结果.csv', encoding = 'utf-8', index = False, quoting = 1)
    
    t1_all = time.time()
    print('点评全部评论图片转换完毕,所需时间为 %.2f s' % (t1_all - t0_all))
    
    正在转换商家 76936090 评论图片: 39018468.jpg
    点评商家 76936090 所有评论图片转换完毕, 所需时间为 3.30 s
    正在转换商家 23060131 评论图片: 428069809.jpg
    正在转换商家 23060131 评论图片: 47855114.jpg
    正在转换商家 23060131 评论图片: 812661193.jpg
    正在转换商家 23060131 评论图片: 752038273.jpg
    正在转换商家 23060131 评论图片: 54695934.jpg
    正在转换商家 23060131 评论图片: 859952667.jpg
    正在转换商家 23060131 评论图片: 113265168.jpg
    正在转换商家 23060131 评论图片: 753526276.jpg
    点评商家 23060131 所有评论图片转换完毕, 所需时间为 14.83 s
    正在转换商家 66264063 评论图片: 19590086.jpg
    正在转换商家 66264063 评论图片: 189696824.jpg
    正在转换商家 66264063 评论图片: 776797215.jpg
    正在转换商家 66264063 评论图片: 52339564.jpg
    正在转换商家 66264063 评论图片: 980002346.jpg
    正在转换商家 66264063 评论图片: 756204408.jpg
    正在转换商家 66264063 评论图片: 812438020.jpg
    正在转换商家 66264063 评论图片: 177743748.jpg
    点评商家 66264063 所有评论图片转换完毕, 所需时间为 13.74 s
    正在转换商家 95358955 评论图片: 25910563.jpg
    点评商家 95358955 所有评论图片转换完毕, 所需时间为 1.54 s
    点评全部评论图片转换完毕,所需时间为 33.41 s
    

    5 封装成函数

    def PicToText(dir):
        # dir参数为照片存放的文件夹
        
        # 读取评论信息下面所有文件夹的名称
        mer_folds = os.listdir(dir)
    
        comment_dp = []
        t0_all = time.time()
    
        for i in range(0, len(mer_folds)):
    
            fold = mer_folds[i]
    
            print('正在转换第 %d 个商家' % (i+1))
            t0 = time.time()
            # 定义一个空的字典 用来存放图片名称+转换后文字的内容
            image_tag = {}
            # 定位到某一商户对应的所有评论信息图片的文件夹里面
            if fold == '.DS_Store':
                continue
            else:
                pics = os.listdir(dir + str(fold))
                for pic in pics:
                    # 针对mac系统的隐藏文件
                    if pic == '.DS_Store':
                        continue
                    else:
                    # 遍历某一商户下所有图片
                        print('正在转换商家 %s 评论图片: %s' % (fold, pic))
                        try:
                            image = get_file_content(dir + str(fold) + '/' + str(pic))
                            tag = client.basicGeneral(image, options)
                            # 先定义一个空的字符 用于后面的拼接
                            comments = ''
                            # 进行判断 如果只识别出一个来 就直接赋值
                            if tag['words_result_num'] == 1:
                                image_tag[pic] = tag['words_result'][0]['words']
                            # 如果不止一个 进行循环 然后拼接评论
                            else:
                                for i in range(tag['words_result_num']):
                                    comments = comments + tag['words_result'][i]['words'] + ' '
                                image_tag[pic] = comments
    
                            time.sleep(1)
                        except Exception as e:
                            print('报错信息为: ', e)
    
    
            # 此时一个商家的图片全部转换ok
            t1 = time.time()
            print('点评商家 %s 所有评论图片转换完毕, 所需时间为 %.2f s' % (str(fold), (t1 - t0)))
            # 先把这部分数据给存起来 形成数据框
            a = []
            b = []
            for k,v in image_tag.items():
                a.append(k)
                b.append(v)
            y = pd.DataFrame({
                '点评评论截图名称':a,
                '百度识别评论结果':b
            })
            y['商户号'] = fold
            comment_dp.append(y)
    
            # else:
            #     break
    
        # 输出所有的信息
        comment_dp_pd = pd.concat(comment_dp, axis=0)
        comment_dp_pd.to_csv('大众点评评论图片转文字结果.csv', encoding = 'utf-8', index = False, quoting = 1)
    
        t1_all = time.time()
        print('点评全部评论图片转换完毕,所需时间为 %.2f s' % (t1_all - t0_all))
        return comment_dp_pd
    
    # 只要加一个参数-文件夹路径即可!
    PicToText('评论信息')
    

    6 总结

    • 上述代码可以实现批量的从图片转为文字(调用百度云API接口),并且形成一个数据框,以供进行后续的分析
    • 读入图片的函数 get_file_content
    展开全文
  • Python3.6实现图片转文字

    万次阅读 多人点赞 2018-05-25 23:41:44
    主要利用Python的第三方库pytesseract,实现图片转文字。但转换效率一般,且有一定的错误,并带有许多空行。可适用于获取图片中的文字,但阅读性不佳。

    前言:因项目所需,要对图片进行基本的文字识别,联想到手机qq有图片自动提取文字功能,觉得肯定有可以调用的外部api。查了一下,比较常用的python实现图片转文字的库是pytesseract(第一反应联想到漫威中的宇宙魔方Tesseract哈哈哈哈


    摘要:主要利用Python的第三方库pytesseract,实现图片转文字。但转换效率一般,且有一定的错误,并带有许多空行。可适用于获取图片中的文字,但阅读性不佳。


    实验环境:

    win10+pycharm2018.1+python3.6

    所需库:

    Pillow             4.3.0

    pytesseract        0.2.0

    安装都很简单,在cmd命令行里直接pip3 install xxxxx就行。

    敲黑板,安装完库还不行,还要安装tesseract的软件,这样系统才能识别引擎成功读取文字。

    可从github下载tesseract-ocr-setup-4.00.00dev

    https://github.com/tesseract-ocr/tesseract/wiki/4.0-with-LSTM#400-alpha-for-windows


    安装的时候要注意,tesseract的安装并不默认安装什么语言,如果自己需要简体中文的语言包,那么就不能一直点next点到finish。如下图,我安装了MATH和简体中文包。




    好了进行完上述预备阶段的任务,代码就很简单了。

    import pytesseract
    from PIL import Image
    import datetime
    
    
    def main():
        for i in range(1,2):
            starttime = datetime.datetime.now()
            image = Image.open(r"C:\Users\夹心\Desktop\计算机网络_"+str(i)+".png")
            text = pytesseract.image_to_string(image, lang='chi_sim')  # 使用简体中文解析图片
            endtime = datetime.datetime.now()
    
            print (r"计算机网络_"+str(i)+r"转换完成,耗时:" + str((endtime - starttime).seconds))
    
            text=text.replace(" ","")
            with open(r"C:\Users\夹心\Desktop\计算机网络_"+str(i)+".txt", "a") as f: # 将识别出来的文字存到本地
                # print(text)
                f.write(str(text))
    
    main()

    几点注意:

    1.转换的速度相对较慢,不是很乐观。如图这样一张字比较密集的图片,转换用时约14s。程序中的datatime库就是为了计算转换用时而设定的。速度的慢体现在批量转换上,并未找到很合适的优化方法。


    2.转化的正确率并非100%。尽管对于图中这样的标准系统字体,转换成功率仍难以达到100%,如单播会被转换成单擎等。

    3.转化后的txt有许多空行,非常影响阅读体验,可以自己设计代码改善一下。因为我要做的是分词,所以空行没有什么妨碍,所以我没有进行处理。



    以上就是python实现图片转文字的讲解。

    展开全文
  • 今天小编就为大家分享一篇Python文字转图片方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 这个软件可以把文字转图片格式,将每一个字都转成对应的颜色,最后以一张图片的方式存储,所需空间比文字格式要小,用的是python语言,并且加了注释,几乎每人都能看懂
  • 这个软件是和文字转图片一起搭配使用的,这是反编译的软件,将图片从颜色在转换成每一个字符,这两个项目非常适合新手练手
  • 参见文章:...文字附带完整使用方法。 使用 python3 开发,通过按住 ctrl 键 并左键点击2点(左上角和右下角区之间的区域),获取需要识别的区域。联网的情况下,将获取的文字写入粘贴板。 高效实用。
  • Python实现--- 图片转文字图案
  • python实现图片转文字的记录

    千次阅读 2018-11-07 16:25:22
    Python3.6使用tesseract-ocr的正确姿势 ... Python3.6实现图片转文字 https://blog.csdn.net/yanjiaxin1996/article/details/80457623 Python爬取Instagram数据&amp;Pytho...

    Python3.6使用tesseract-ocr的正确姿势

    https://blog.csdn.net/qq_14998713/article/details/78824859

    Python3.6实现图片转文字

    https://blog.csdn.net/yanjiaxin1996/article/details/80457623

    Python爬取Instagram数据&Python将图片转化为文字

    https://blog.csdn.net/zhangwellyear/article/details/78398543

    展开全文
  • 在日常办公或者学习中,往往存在这样一个工作场景,比如,“老王,我这里有一张图片,你把里面的文字信息给我整理出来”,都2021年了,你真的还在手敲图片文字信息么?那么还不赶紧收藏这篇秘籍,...
  • 主要介绍了使用Python脚本将文字转换为图片的实例分享,主要用到了PIL库,需要的朋友可以参考下
  • python图片转成为文字中遇到的问题 基本步骤参考下面大佬的博客 https://blog.csdn.net/yanjiaxin1996/article/details/80457623 在运行代码的时候遇到了一个错误 : pytesseract.pytesseract....
  • python3.5 实现图片转文字

    千次阅读 2017-09-22 10:02:20
    一、运行环境  (1) win10  (2) pycharm ... (3) python 3.5  (4) pip3 install pillow  pip3 install pytesseract  (5) 识别引擎tesseract-ocr 二、 运行代码 # -*- coding: utf-8 -*- f

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,898
精华内容 24,759
关键字:

python图片转文字

python 订阅