本文介绍了如何使用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识别的文本中提取出经纬度信息,并将其写入文件。这种方法可以用于处理地理信息数据集,例如地图和卫星图像。