ضبط خودکار تصویر از صفحه میز کار، استخراج متن و ذخیره سازی آن در فایل در یک بازه زمانی
امروز عصر یکی از نزدیکان با من تماس گرفت و راهکاری رو برای حل مشکلش می خواست. ایشون تمایل داشت تا چندتا سرویس که خدمات ویدئو کنفرانس را ارائه می کنند، نظیر Skype، GoogleHangout و مانند این ها رو از لحاظ کیفیت خط ارتباطاتی و مولفه های کیفیت شبکه ای مورد بررسی قرار بدهند. همه کارها رو انجام داده بودند، ولی استخراج دادهها براشون دردسر شده بود. کلیت کار این بود که یکی از کاربران یک Stopwatch رو با دقت صدم ثانیه اجرا می کرد و فیلمش رو ذخیره می کرد. حالا یک طرف فیلم رو پخش می کرد و طرف دیگه همون فیلم رو دریافت می کرد و با یه ترفندی دوباره به فرد مقابل ارسال می کرد!!!! از این ها بگذریم ...
این بنده خدا می خواست از میز کارش یه اسکرین شات مثلا هر یک ثانیه یه بار و برای مثلا 10 دقیقه بگیره و بعد بشینه دونه به دونه داده ها رو وارد Excel کنه! یعنی 600 تا عکس! من این اسکریپت پایتون رو برای ایشون، البته خیلی کد تمیز و بهینهای نیست و فقط هدفم انجام کار بوده!، نوشتم که ابتدا عکسها رو میگیره و بعد از اون، دونه به دونه اون ها رو با استفاده از موتور متن باز OCR به نام tesseract پردازش می کنه و در یه فایل ذخیره می کنه.
پی نوشت: توضیحات اصلا کافی نیست! فقط برای این هست که یادم نره چه کار کردم و بعدا سر فرصت تکمیلش می کنم.
#!python
import subprocess
import Image
import ImageGrab
import time
import os
name = 'screen2'
path = r'D:\temp\ali'
os.chdir(path)
i = 0
n = 60 * 10# 60 SECONDS * 10 MINUTES
dead = 1 # sleep for dead seconds
list = []
out = []
x = 166
y = 40
h = 1108
w = 65
while (i < n) :
img = ImageGrab.grab()
s = os.path.join(path, name + '_' + str(i) + '.jpg')
list.append(name + '_' + str(i) + '.jpg')
i = i + 1
img.crop((x,y,h,w)).save(s)
time.sleep(dead)
temp = "temp" #os.path.join(path, "temp")
for item in list :
p = subprocess.Popen(["tesseract", item, temp , "-psm 7"], cwd=path)
p.wait()
print ["tesseract", item + " " + temp + " " + "-psm 7"]
f = open(os.path.join(path, "temp.txt"))
for line in f.readlines():
out.append(line)
f.close()
outf = open(os.path.join(path, name + "_output.txt"), "a+")
for item in out:
outf.write(item + "\n")
outf.close()
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.