לאון מינץ
הכל התחיל כשקראתי בלינמגזין על scipy ועל numpy ועל כך שהם יכולים להוות תחליף למטלאב. כעבור זמן מה למדתי על פייתון מתוך ויקיספר ומאז אני מגיש תרגילי בית בפייתון בלבד, לעיניהם המקנאות של משתמשי המטלאב...כידוע, מצב זיהום האוויר במפרץ חיפה הוא בכי רע למרות מה שהרשויות מספרות. יתרה מזאת, ישנן טענות כי בלילות, מתי שהמפעלים פולטים את רוב המזהמים, תחנות הניטור מנוטרלות(!)...
החלטתי לשים את היד על הדופק ולעקוב באופן רציף אחר קריאות המנטרים. הייתי אופטימי כשציפיתי שאיגוד ערים חיפה יתן לי את זה ב-RSS. מה שקורה בפועל הוא שיש שני קבצי PNG במסווה של דפי PHP:
הרעיון הוא לקרוא את המספרים באמצעות OCR. ובכן, שלבי הפעולה הם:
import os # for executing wget, gocr
import Image
import ImageFilter as Filter
import ImageEnhance as Enhance
url1='http://www.net4u.co.il/envihaifa/map.php'
url2='http://www.net4u.co.il/envihaifa/Proopin.php'
command1='wget ' + url1 + ' -O map1.png'
command2='wget ' + url2 + ' -O map2.png'
print '===================='
print 'Retrieving map1...'
print '===================='
os.system(command1)
print '===================='
print 'Retrieving map2...'
print '===================='
os.system(command2)
rect={}
rect['Shuk_Talpiot']=[164,132,195,144]
rect['Kiryat_Shprintzak']=[47,102,76,114]
rect['Carmelia']=[62,208,92,220]
rect['Ahuza']=[122,225,153,238]
rect['Einstein']=[153,289,183,300]
rect['Neve_Shaanan']=[237,237,267,249]
rect['Krayot_tunnel']=[256,197,285,208]
rect['Nesher']=[318,307,348,318]
rect['Igud_Arim']=[348,236,377,247]
rect['Kfar_Hasidim']=[449,330,478,342]
rect['Kiryat_Tivon']=[509,429,539,441]
rect['Kiryat_Binyamin']=[480,231,510,244]
rect['Kiryat_Ata']=[499,209,528,221]
rect['Kiryat_Bialik']=[493,87,523,99]
rect['Kiryat_Motzkin']=[488,35,517,46]
rect['Kiryat_Haim']=[379,69,408,80]
rect['Kiryat_Yam']=[444,3,474,16]
rect['DATE']=[13,3,88,18]
rect['TIME']=[97,4,138,17]
rect2={}
rect2['Romema']=[78,21,107,32]
rect2['Israelia']=[182,91,212,103]
rect2['Sapir']=[89,111,119,122]
EXT='.png'
Air_quality={}
print 'Processing map1...'
# Load, convert to Grayscale and Invert colors:
im = Image.open('map1.png').convert('L').point(lambda i: 255 -i)
for obj in rect:
# Crop rectangle and Sharpen:
cropped=im.crop(rect[obj]).filter(Filter.SHARPEN)
if ((rect[obj] == rect['DATE']) or (rect[obj] == rect['TIME'])):
# Date and Time are on different background...
cropped=cropped.point(lambda i: 255 -i)
# Increase contrast:
cropped=Enhance.Contrast(cropped).enhance(2)
cropped.save(obj + EXT)
# Run OCR and store:
Air_quality[obj]=os.popen('gocr -i ' + obj + EXT).read()
print 'Processing map2...'
im = Image.open('map2.png').convert('L').point(lambda i: 255 -i)
for obj in rect2:
cropped=im.crop(rect2[obj]).filter(Filter.SHARPEN)
cropped=Enhance.Contrast(cropped).enhance(2)
cropped.save(obj + EXT)
Air_quality[obj]=os.popen('gocr -i ' + obj + EXT).read()
for obj in Air_quality:
print obj+': ', Air_quality[obj]
מה שנשאר לעשות זה לאחסן את המידע לאורך זמן בקובץ טקסט ולהציג את המידע על גרף עם pylab. אולי אפילו ליצור GNOME Panel Applet שיציג את הנתונים המעודכנים ישירות אל תוך שורת המשימות...
הכתבה פורסמה גם בלינמגזין
החלטתי לשים את היד על הדופק ולעקוב באופן רציף אחר קריאות המנטרים. הייתי אופטימי כשציפיתי שאיגוד ערים חיפה יתן לי את זה ב-RSS. מה שקורה בפועל הוא שיש שני קבצי PNG במסווה של דפי PHP:
הרעיון הוא לקרוא את המספרים באמצעות OCR. ובכן, שלבי הפעולה הם:
- הורדת התמונות למחשב עם wget.
- לאחר מכן יש לבצע cropping עבור המלבנים המעניינים אותנו.
- לבסוף יש להמיר עם OCR. לצורך כך נשתמש ב-gocr.
import os # for executing wget, gocr
import Image
import ImageFilter as Filter
import ImageEnhance as Enhance
url1='http://www.net4u.co.il/envihaifa/map.php'
url2='http://www.net4u.co.il/envihaifa/Proopin.php'
command1='wget ' + url1 + ' -O map1.png'
command2='wget ' + url2 + ' -O map2.png'
print '===================='
print 'Retrieving map1...'
print '===================='
os.system(command1)
print '===================='
print 'Retrieving map2...'
print '===================='
os.system(command2)
rect={}
rect['Shuk_Talpiot']=[164,132,195,144]
rect['Kiryat_Shprintzak']=[47,102,76,114]
rect['Carmelia']=[62,208,92,220]
rect['Ahuza']=[122,225,153,238]
rect['Einstein']=[153,289,183,300]
rect['Neve_Shaanan']=[237,237,267,249]
rect['Krayot_tunnel']=[256,197,285,208]
rect['Nesher']=[318,307,348,318]
rect['Igud_Arim']=[348,236,377,247]
rect['Kfar_Hasidim']=[449,330,478,342]
rect['Kiryat_Tivon']=[509,429,539,441]
rect['Kiryat_Binyamin']=[480,231,510,244]
rect['Kiryat_Ata']=[499,209,528,221]
rect['Kiryat_Bialik']=[493,87,523,99]
rect['Kiryat_Motzkin']=[488,35,517,46]
rect['Kiryat_Haim']=[379,69,408,80]
rect['Kiryat_Yam']=[444,3,474,16]
rect['DATE']=[13,3,88,18]
rect['TIME']=[97,4,138,17]
rect2={}
rect2['Romema']=[78,21,107,32]
rect2['Israelia']=[182,91,212,103]
rect2['Sapir']=[89,111,119,122]
EXT='.png'
Air_quality={}
print 'Processing map1...'
# Load, convert to Grayscale and Invert colors:
im = Image.open('map1.png').convert('L').point(lambda i: 255 -i)
for obj in rect:
# Crop rectangle and Sharpen:
cropped=im.crop(rect[obj]).filter(Filter.SHARPEN)
if ((rect[obj] == rect['DATE']) or (rect[obj] == rect['TIME'])):
# Date and Time are on different background...
cropped=cropped.point(lambda i: 255 -i)
# Increase contrast:
cropped=Enhance.Contrast(cropped).enhance(2)
cropped.save(obj + EXT)
# Run OCR and store:
Air_quality[obj]=os.popen('gocr -i ' + obj + EXT).read()
print 'Processing map2...'
im = Image.open('map2.png').convert('L').point(lambda i: 255 -i)
for obj in rect2:
cropped=im.crop(rect2[obj]).filter(Filter.SHARPEN)
cropped=Enhance.Contrast(cropped).enhance(2)
cropped.save(obj + EXT)
Air_quality[obj]=os.popen('gocr -i ' + obj + EXT).read()
for obj in Air_quality:
print obj+': ', Air_quality[obj]
מה שנשאר לעשות זה לאחסן את המידע לאורך זמן בקובץ טקסט ולהציג את המידע על גרף עם pylab. אולי אפילו ליצור GNOME Panel Applet שיציג את הנתונים המעודכנים ישירות אל תוך שורת המשימות...
הכתבה פורסמה גם בלינמגזין
אין תגובות:
הוסף רשומת תגובה