批量提取汇总图片中的经纬度信息

本文介绍了如何使用Python和百度OCR API提取图片中的经纬度信息,并将提取结果汇总到一个文件中。具体来说,我们将使用百度OCR API识别图片中的文字,然后使用正则表达式提取其中的经纬度信息。最后,我们将提取的经纬度信息写入一个文本文件。

注意:鉴于目前文字识别的水平,在拍摄图片时需要注意经纬度水印为白底才能保证经纬度被正确的识别,经纬度水印为白底例如如下图片:

首先,我们需要安装百度OCR Python SDK。你可以在这里找到安装说明:

文字识别-百度智能云

然后,我们需要获取图片文件夹的路径。我们可以使用Python的tkinter和filedialog模块来让用户选择文件夹。

selected_folder = select_folder()

接下来,我们需要获取文件夹中所有的JPEG文件。我们可以使用Python的pathlib模块来实现。

all_files = get_files(selected_folder)

接下来,我们需要使用百度OCR API识别图片中的文字。我们可以使用Python的requests模块来发送HTTP请求。

def get_image_text(aipOcr, image):
    options = {"detect_direction": "true", "language_type": "CHN_ENG"}
    result = aipOcr.basicGeneral(image, options)
    words_result = result["words_result"]

    rslt=''
    for i in range(len(words_result)):
        rslt+=words_result[i]['words']

    return rslt

接下来,我们需要使用正则表达式提取经纬度信息。我们可以使用Python的re模块来实现。

def extract_coordinates(text):
    pattern = r"(经度|度):([\\d\\.]+)°?[EWNS].*?(纬度|度):([\\d\\.]+)°?[EWNS]"
    matches = re.findall(pattern, text)
    longitude, latitude = None, None
    for match in matches:
        longitude = float(match[1])
        latitude = float(match[3])
    return f"longitude: {longitude}, latitude: {latitude}\\n"

最后,我们将提取的经纬度信息写入文件。我们可以使用Python的open函数来创建文件。

file_path = os.path.join(os.getcwd(), "经纬度Output.txt")
with open(file_path, "w") as f:
    f.write(txt)

完整的代码:

# -*- coding: UTF-8 -*-
import re, os, glob
from aip import AipOcr
import tkinter as tk
from tkinter import filedialog
import pathlib

def main():
    APP_ID = 'your_APP_ID'
    API_KEY = 'your_API_KEY'
    SECRET_KEY = 'your_SECRET_KEY'

    # 初始化AipFace对象
    aipOcr = AipOcr(APP_ID, API_KEY, SECRET_KEY)

    # 获取文件夹路径
    selected_folder = select_folder()
    if not selected_folder:
        return
    all_files = get_files(selected_folder)

    # 提取经纬度信息
    txt = ""
    for file in all_files:
        try:
            with open(file, "rb") as f:
                经纬度图片 = f.read()
                txt0 = get_image_text(aipOcr, 经纬度图片)
            txt += f"{file};{extract_coordinates(txt0)}"
        except:
            pass

    # 写入结果到文件
    file_path = os.path.join(os.getcwd(), "经纬度Output.txt")
    with open(file_path, "w") as f:
        f.write(txt)

def select_folder():
    root = tk.Tk()
    root.withdraw()
    return filedialog.askdirectory()

def get_files(folder):
    extensions = ["jpg"]
    return [file for ext in extensions for file in pathlib.Path(folder).rglob(f"*.{ext}")]

def get_image_text(aipOcr, image):
    options = {"detect_direction": "true", "language_type": "CHN_ENG"}
    result = aipOcr.basicGeneral(image, options)
    words_result = result["words_result"]

    rslt=''
    for i in range(len(words_result)):
        rslt+=words_result[i]['words']

    return rslt

def extract_coordinates(text):
    pattern = r"(经度|度):([\\d\\.]+)°?[EWNS
    .]*?(纬度|度):([\\d\\.]+)°?[EWNS]"
    matches = re.findall(pattern, text)
    longitude, latitude = None, None
    for match in matches:
        longitude = float(match[1])
        latitude = float(match[3])
    return f"longitude: {longitude}, latitude: {latitude}\\n"

if __name__ == "__main__":
    main()

本次介绍了如何使用Python和百度OCR API提取图片中的经纬度信息。通过使用正则表达式,我们可以从OCR识别的文本中提取出经纬度信息,并将其写入文件。这种方法可以用于处理地理信息数据集,例如地图和卫星图像。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值