微信截图

微信截图识别

本文主要介绍利用开源的googel ocr工具进行图片文字识别

大体思路:
1对图片灰度化
2.根据灰度变化情况找到各个边界。
3.根据边界裁剪,然后识别昵称、地区、签名

#encoding=utf_8
import pytesseract
import json
import cv2
import numpy as np
from PIL import Image
def weixin_rec(imgpath):
    #定义一个空的字典,用于存储识别结果
    wx_infor = {"nicheng": "", "address": "", "signature": ""}
    list=[]#
    n=0
    try:
        opimage=cv2.imread(imgpath,0)
        opimage1=cv2.imread(imgpath,0)
        image = Image.open(imgpath)
        image = image.convert('L')
    except IOError:
        print "Error: 没有找到文件或读取文件失败"
        return
    #图像强制二值化
    cv2.threshold(opimage,250,255,0,opimage)
    for i in range(0,opimage.shape[0]):
        for j in range(0, opimage.shape[1]):
         if(opimage[i,j]==255):
           opimage[i,j]=1
    #
    for k in range(0,opimage.shape[0]-1):

        if(((opimage[k,:].sum()==0)and(opimage[(k+1),:].sum()==opimage.shape[1]))or((opimage[k,:].sum()>=opimage.shape[1]-6)and(opimage[(k+1),:].sum()<150))):
          list.append(k)

    print list
    try:
      for m in range(opimage.shape[1]-1,0,-1):
        if (opimage[int(0.85*(list[0]+int(0.6*(list[1]-list[0])))),m]==1 and opimage[int(0.85*(list[0]+int(0.6*(list[1]-list[0])))),m-1]==0 ):

            n=m
            break
    except UnboundLocalError:

        print "性别标志定位失败"
    except IndexError:

        print "性别标志定位失败"
    d=int(0.045*(opimage.shape[1]))


    if len(list)==7:

         imgnicheng = Image.fromarray(opimage1[list[0]:list[1],int(0.25*(opimage.shape[1])):])
         imgaddre = Image.fromarray(opimage1[list[4]:list[5],int(0.2*opimage1.shape[1]):int(0.6*opimage1.shape[1])])
         imgsig=Image.fromarray(opimage1[list[5]+1:list[6],int(0.25*opimage1.shape[1]):])
         nicheng=Image.fromarray(opimage1[list[0]:list[0]+int(0.45*(list[1]-list[0])),int(0.24 * opimage1.shape[1]):n-d])

         wx_infor.update({"nicheng": pytesseract.image_to_string(nicheng, lang="chi_sim")})
         wx_infor.update({"address": pytesseract.image_to_string(imgaddre, lang="chi_sim")})
         wx_infor.update({"signature": pytesseract.image_to_string(imgsig, lang="chi_sim")})
         nicheng.show()
    elif len(list)==10:
        for m in range(opimage.shape[1] - 1, 0, -1):
            if (opimage[int(0.83 * (list[2] + int(0.65*(list[3] - list[2])))), m] == 1 and opimage[int(0.83 * (list[2] + int(0.65 * (list[3] - list[2])))), m - 1] == 0):
                n = m
                break

        imgnicheng = Image.fromarray(opimage1[list[2]:list[3], int(0.25*(opimage.shape[1])):])
        nicheng = Image.fromarray(opimage1[list[2]:list[2] + int(0.45 * (list[3] - list[2])), int(0.24 * opimage.shape[1]):n-d])
        imgaddre = Image.fromarray(opimage1[list[6]:list[7], int(0.2 * opimage1.shape[1]):int(0.6 * opimage1.shape[1])])
        imgsig = Image.fromarray(opimage1[list[7] + 1:list[8], int(0.25 * opimage1.shape[1]):])
        wx_infor.update({"nicheng": pytesseract.image_to_string(nicheng, lang="chi_sim")})
        wx_infor.update({"address": pytesseract.image_to_string(imgaddre, lang="chi_sim")})
        wx_infor.update({"signature": pytesseract.image_to_string(imgsig, lang="chi_sim")})
    elif len(list)==11:
        for m in range(opimage.shape[1] - 1, 0, -1):
            if (opimage[int(0.83 * (list[2] + int(0.65*(list[3] - list[2])))), m] == 1 and opimage[int(0.83 * (list[2] + int(0.65 * (list[3] - list[2])))), m - 1] == 0):
                n = m
                break

        imgnicheng = Image.fromarray(opimage1[list[2]:list[3], int(0.25*(opimage.shape[1])):])
        nicheng = Image.fromarray(opimage1[list[2]:list[2] + int(0.45 * (list[3] - list[2])), int(0.24 * opimage.shape[1]):n-d])
        imgaddre = Image.fromarray(opimage1[list[6]:list[7], int(0.2 * opimage1.shape[1]):int(0.6 * opimage1.shape[1])])
        imgsig = Image.fromarray(opimage1[list[7] + 1:list[8], int(0.25 * opimage1.shape[1]):])
        wx_infor.update({"nicheng": pytesseract.image_to_string(nicheng, lang="chi_sim")})
        wx_infor.update({"address": pytesseract.image_to_string(imgaddre, lang="chi_sim")})
        wx_infor.update({"signature": pytesseract.image_to_string(imgsig, lang="chi_sim")})

    elif len(list)==6:
        cs= Image.fromarray(opimage1[list[4]:list[5],:])
        imgnicheng = Image.fromarray(opimage1[list[0]:list[1], int(0.25 * opimage1.shape[1]):])
        imgaddre = Image.fromarray(opimage1[list[4]:list[5], int(0.2 * opimage1.shape[1]):int(0.6 * opimage1.shape[1])])

        nicheng = Image.fromarray(opimage1[list[0]:list[0]+int(0.45*(list[1]-list[0])), int(0.24 * opimage1.shape[1]):n-d])

        wx_infor.update({"nicheng": pytesseract.image_to_string(nicheng, lang="chi_sim")})
        wx_infor.update({"address": pytesseract.image_to_string(imgaddre, lang="chi_sim")})
        cs.show()
    elif len(list) == 4:
        imgnicheng = Image.fromarray(opimage1[list[0]:list[1], int(0.25 * opimage.shape[1]):])

        nicheng = Image.fromarray(opimage1[310:380, int(0.24 * opimage.shape[1]):n-d])
        wx_infor.update({"nicheng": pytesseract.image_to_string(nicheng, lang="chi_sim")})


    else:
        print "图像非添加好友截图"
        return
    # for i in json.dumps(wx_infor, encoding="UTF-8", ensure_ascii=False):
    #     wx_infor[i]=wx_infor[i].split('\n')

    return json.dumps(wx_infor, encoding="UTF-8", ensure_ascii=False)
    # return wx_infor
if __name__ == "__main__":
 k=weixin_rec("wx666.jpg")
 print k

这里写图片描述

结果如下:
这里写图片描述

<think>首先,用户的问题是基于他们提供的引用信息,但系统指令明确指出:"上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。" 用户上一次的问题没有被显示在这里,所以我需要回想或假设上下文。 从用户当前的问题看:"我想查找取消微信截屏自动截取全屏的方法 请问取消微信截屏自动截取全屏的方法",用户想取消微信截屏时自动截取全屏的功能。 回顾提供的引用: - 引用[1]:介绍微信电脑版的截图功能,快捷键等。 - 引用[2]:提到使用PicPick作为替代截图工具,支持滚动截屏。 - 引用[3]:是关于编程实现微信自动回复和截图文字提取的Python代码。 - 引用[4]:讨论Delphi实现类似微信截图功能的思路,提到抓取整个屏幕后再操作。 用户的问题焦点是"取消微信截屏自动截取全屏的方法"。意思是,在微信截屏时,默认可能是自动截取全屏,用户想取消这个行为,可能是想只截取部分屏幕。 系统指令说:"请尽可能多的参考用户上一次的问题和你的回答",但用户上一次的问题没有提供。在这个对话中,用户第一次问题是这个,所以我应该基于当前信息。 用户说:"上述引用仅供参考",所以我不能依赖引用作为主要信息,而是要直接回答用户的问题。 现在,回答用户问题:"取消微信截屏自动截取全屏的方法" 在微信电脑版中,截图功能默认是部分截图:按快捷键(如Alt+A)后,屏幕会变暗,用户可以选择区域截取。不是自动全屏截取。 从引用[1]:"微信电脑版内置了便捷的截图功能",它描述了选择区域截取。 引用[4]提到实现类似功能时,是先抓全屏再操作,但这是编程层面。 用户可能误解了,或者在某些情况下微信截屏是全屏的?但在标准使用中,微信截屏是交互式的选择区域。 用户说"取消微信截屏自动截取全屏",暗示它当前是自动全屏的。 或许用户遇到了问题:当他们按截图快捷键时,微信直接截取了全屏,而不是让他们选择区域。 这可能是一个 bug 或设置问题。 另一个可能性:用户想自定义截图行为。 从引用[2]和[4],可以建议使用第三方工具来替代。 回答结构: - 系统指令要求使用中文回答。 - 结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠(基于我对微信的了解)。 我知道微信电脑版的截图功能是这样的: - 默认快捷键是 Alt+A(Windows)或 Command+Shift+A(Mac),按后进入截图模式,用户可以拖动选择区域。 - 不是自动截全屏。 所以,用户可能是误操作或遇到问题。 步骤来回答: 1. 澄清微信的默认行为:微信截屏通常是选择区域截图。 2. 如果用户遇到自动全屏截取,提供解决方案:检查设置、重启软件、使用快捷键正确。 3. 如果用户想完全取消截图功能,建议关闭或使用其他工具。 4. 基于引用,提供替代方案,如引用[2]的PicPick工具。 系统指令还说:"生成相关问题",在回答后添加相关问题。 格式: - 使用行内数学表达式用$...$,但这个问题可能不涉及数学,所以可能不需要。 - 独立公式用$$...$$,同样可能不需要。 - 回答中引用的段落末尾添加引用标识,如[^1],但用户说引用仅供参考,所以可能不直接引用它们。 用户说:"上述引用仅供参考,并不是用户真正的需求",所以引用不一定是相关的。 用户需求是取消微信截屏自动截取全屏。 可能的回答步骤: 1. 解释微信截屏的默认行为。 2. 指导如何避免自动截全屏:确保正确使用快捷键。 3. 如果问题持续,建议检查更新或重装。 4. 提供不使用微信截屏的替代方法,如第三方工具。 从引用[2],PicPick是一个选项。 引用[3]和[4]是编程相关的,可能不直接相关。 最终,生成相关问题。 回答结构: - 开头澄清。 - 步骤解释。 - 结束建议。 相关问题例如: 1. 如何更改微信截图快捷键? 2. 微信截图常见问题解决? 3. 推荐的截图工具? </think>基于您的查询,您希望取消微信电脑版截图时自动截取全屏的行为。微信电脑版的默认截图功能是**交互式区域截图**(即按快捷键后,允许用户手动选择截图区域,而非自动截全屏)。如果您遇到截图时自动截取全屏的问题,可能是软件故障、快捷键误操作或设置异常导致的。下面我将逐步为您提供解决方法,确保回答清晰可靠。以下是具体步骤和建议: ### 步骤1: 确认微信截图默认行为 微信电脑版的截图功能设计为快捷键触发后进入选择模式(屏幕变暗),用户需拖动鼠标选择区域才能完成截图。默认快捷键为: - Windows: `Alt + A` - macOS: `Command + Shift + A` 如果您的截图自动截取全屏,可能是以下原因之一: - 快捷键被误触发(例如,快捷键冲突或软件错误)。 - 微信版本过旧或临时bug。 - 第三方工具干扰(如其他截图软件覆盖了微信功能)[^1]。 ### 步骤2: 解决自动截取全屏的方法 按照以下操作排查和修复问题: 1. **正确使用快捷键**: - 确保不要连续按键:按下快捷键后,微信会进入截图模式(屏幕变暗),此时**不要按回车或空格键**,否则可能意外触发全屏截图。 - 手动选择区域:快捷键激活后,用鼠标拖动选择所需区域,然后点击"完成"或按`Enter`确认截图。 2. **检查微信设置并更新软件**: - 打开微信电脑版 > 左下角菜单 > "设置" > "快捷方式"。 - 查看"屏幕截图"快捷方式是否被修改(如设置为其他快捷键)。如有冲突,重置为默认`Alt + A`(Windows)或`Command + Shift + A`(Mac)。 - 更新微信到最新版本:旧版本可能有bug导致异常。前往微信官网下载最新安装包覆盖安装。 3. **重启微信或电脑**: - 完全退出微信(右键任务栏图标 > "退出"),然后重新登录。 - 如果问题持续,重启电脑以清除临时缓存和冲突进程。 4. **禁用第三方工具干扰**: - 如果安装了其他截图工具(如QQ截图、Snipaste等),它们可能与微信快捷键冲突。暂时关闭这些工具后重试微信截图。 - 参考引用[2],如果您寻求更灵活的截图方式(如滚动截屏),可以考虑使用替代工具如 **PicPick**(免费、支持滚动截屏、无需登录)[^2]。安装PicPick后,禁用微信截图功能以避免冲突。 5. **重装微信或清除缓存**: - 卸载微信:通过控制面板(Windows)或应用程序(Mac)卸载。 - 手动删除残留文件:删除微信缓存文件夹(路径示例:Windows: `C:\Users\<用户名>\AppData\Roaming\Tencent\WeChat`)。 - 重新安装微信官网最新版。 ### 步骤3: 替代方案(如果微信功能无法修复) 如果上述方法无效,或您想永久避免微信截图,推荐以下替代方案: - **使用Windows/macOS内置截图工具**: - Windows: 按`Win + Shift + S`进入区域截图模式。 - macOS: 按`Command + Shift + 4`选择区域截图。 - **第三方截图工具推荐**: - **PicPick**:支持滚动截屏、编辑功能,免费且无需登录(下载地址:picpick.org),如引用[2]所述,适合长页面截图[^2]。 - **Snipaste**:专业截图工具,提供贴图、标注功能(snipaste.com)。 - **编程自定义截图**(高级用户): 如引用[4]提到的,可通过脚本(如Python或AutoHotkey)实现自定义截图逻辑,避免全屏抓取[^4]。例如,使用Python的`PyAutoGUI`库手动控制截图区域: ```python import pyautogui # 示例:截取指定区域(非全屏) screenshot = pyautogui.screenshot(region=(100, 100, 500, 300)) # (左,顶,宽,高) screenshot.save("custom_screenshot.png") ``` ### 注意事项 - 微信截图功能本身**不支持禁用自动截图模式**,因为它默认就是交互式区域截图。如果问题持续,可能是系统环境问题(如驱动冲突),建议联系微信客服反馈。 - 定期更新软件可减少bug发生概率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值