التعامل مع json و معالجة الصور ومعرفة اسم صاحب الصورة بالبايثون

التعامل مع json و معالجة الصور ومعرفة اسم صاحب الصورة بالبايثون

التعامل مع json و معالجة الصور ومعرفة اسم صاحب الصورة بالبايثون

في هذة المقالة سوف نتحدث معكم في اكثر من جانب الشق الاول وهو كيفية انشاء ملفات تحتوي على بيانات في شكل json وقد سبق وشرحنا لكم الجيسون وكم هي مهمة جدا في لغات البرمجة وليس في البايثون فقط وبعدها سوف ننتقل معكم الى معرفة محتويات الملفات على جهاز الكمبيوتر الخاص بنا والشق الاخير سوف نقوم ببعض العمليات على image ومعرفة اسم صاحب الصورة من خلال صورته فقط كل هذا سوف نتحدث عنه في مقالة اليوم .


تعد مشاريع بلغه بايثون احد اهم الاشياء التي يبحث عليها الكثير منكم. لكي يتعلم و يتقن لغه البايثون ويرجع ذلك الى عده اسباب اولا ان اسكريبتات لغه بايثون مهمه جدا في الذكاء الاصطناعي ويريد الكثير منكم تعلم هذه المهاره. ايضا تعد لغه بايتون اكثر لغه عليها طلب في سوق العمل في الوقت الحالي وذلك لعده اشياء سوف نذكرها معكم في النقطه التاليه. ولكن يجب عليكم التركيز في جميع اكواد بايثون وامثله على الاكواد التي سوف نقدمها لكم لانه باتباعك هذه الاكواد واتقانها بشكل جيد سوف اخبرك انك سوف تكون قادر على فعل خوارزميات الذكاء الاصطناعي حيث سوف نتعمق معكم في كثير من التفاصيل حول هذه اللغه وحول البرمجه من خلالها. 


السبب الذي يجعل لغه python اكثر لغه عليها طلب في سوق العمل وايضا في الذكاء الاصطناعي هو توفرها على مكتبات  كثيره وايضا سهوله في كتابه الكود حيث يمكنك كتابه اكواد لغه بايثون باي لغه اخرى مثل لغه جافا ولكن قد تجد ان الامر. طويل جدا في الجافا والذي تتميز بايثون به البساطه. وهذا ما يفضله الكثير منا وهو كتابه اكواد بسيطه جدا تقوم بوظيفه كبيره. وايضا وجود المكتبات. يساعد على تحسين و في اشهار لغه البايثون. ومن خلال المقالات التاليه سوف نستعرض معكم اكواد و مكتبات كثيره جدا. بي بايثون 


كيفية تخزين بيانات المستخدم في ملف json باستخدام بايثون

تعتبر json من اكثر الصيغ التي لا غنى عنها في البرمجة وهي تعمل بطريقة المفتاح والعنصر وتسهل علي الوصول للمعلوميات ببساطة سوف نقوم باستدعاء المكتبات التي نحتاجها وبعدها نقوم بإنشاء ملف باسم test.json ونسال المسخدم هل هو مستخدم جديد اذا كانت الاجابة نعم سوف يقوم بإضافته في الملف ويقوم بإنشاء id له ويكون الوقت الحالي وبعدها يساله ماهو اسمك ويتاكد هل يوجد folder باسم dataset في ملف المشروع ام لا


كيفية تخزين بيانات المستخدم في ملف json باستخدام بايثون

اذا لم يكن هناك ملف بهذا الاسم يقوم بإنشاءة واذا كان موجود سابقا فلا داعي لانشاء بعدها يقوم بوضع الاسم الخاص بالمستخدم داخل الملف وبعدها يتاكد هل هذا المسار موجود سابقا ام لا اذا لم يكن موجود سوف يقوم باضافته داخل ملف json ويكون بالاسم و الوقت الفعلي والذي رمزنا له باسم user_id وايضا سوف يضع العمر 30 يمكنك تغيره ووضع اي متغيرات اخرى تريدها وبعدها سوف يفتح الملف ويقوم بالكتابة بداخلة .


import os , time , json
users = json.load(open("test.json"))
is_new = input("you are new ? ")
if is_new =='yes' :
    user_id = int(time.time())    = time now
    name = input("Please enter your name : ")   # new of user
if not os.path.isdir("dataset") :
    os.makedirs("dataset")  
target = os.path.join("dataset" , str(user_id))
if not os.path.isdir(target) :
    os.makedirs(target)
users[user_id] = {"name" : name , "age":30}
json.dump(users , open("test.json" , "w"))


كيفية معرفة جميع الملفات الموجوده بداخل folder معين بالبايثون

كيفية معرفة جميع الملفات الموجوده بداخل folder معين بالبايثون

احيانا تريد معرفة ماهي المجلدات التي بداخل ملف معين على الجهاز لكي تقوم بإجراء عمليات عليها , ببساطة نكتب المسار الذي نريدة والامر getcdw يعني المجلد الذي نقف فيه حاليا وبعدها نقوم بعمل for على كل محتويات الملف ونقوم بطباعة كل اسماء المجلدات التي بداخلة وفي النهاية سوف تشاهد الطباعة هي كل المجلدات الخاصه بالمف كما يظهر في الصورة وهذا من الاكواد التي سوف تحتاجها بشكل كبير .

import os , cv2

base_path = os.path.join(os.getcwd() , "dataset")
for folder_name in os.listdir(base_path) :
    folder_path = os.path.join(base_path , folder_name)
    print(folder_path)
    


كيفية قراءة جميع محتويات الملف بواسطة python

كيفية قراءة جميع محتويات الملف بواسطة python

هذا الكود يساعدك في اكتشاف كل العناصر الموجوده في ملف البايثون الخاص بك وهذا الكود مهم لكي نعرف ما يوجد بداخل الملفات دون فتحها اذا كنت قلق بشأن الملف او تريد عمل عليه اي عملية تخطر ببالك وهذا الكود استكمال للكود السابق حيث ان السابق تعرفنا على كل المجلدات الموجوده بداخله وهذا يظهر لنا كل العناصر بداخلة وذلك عن طريق اننا نقوم بعمل for على كل المجلدات الموجوده وكل مجلد يظهر معنا نقوم بعمل له loop لكي نعرف ما بداخلة وسوف تشاهد ظهور مخرجات كثيره مثل التي تظهر بالصورة .

import os , cv2

base_path = os.path.join(os.getcwd() , "dataset")
for folder_name in os.listdir(base_path) :
    folder_path = os.path.join(base_path , folder_name)
    if os.path.isdir(folder_path) :
        for image_name in os.listdir(folder_path) :
            image_path = os.path.join(folder_path , image_name)
            print(image_path)
            

كود بايثون لمعرفة جميع الصور الموجوده في مجلد معين في جهازك

كود بايثون لمعرفة جميع الصور الموجوده في مجلد معين في جهازك

في دروس cv2 تعرفنا على طريقة لانشاء صور للمستخدم وهذة الصور قمنا بعملهم في مجلد ونريد ان نعرف مجموع المجلدات والصور التي بداخله ولتلك العملية سوف تحتاج الى الكود التالي الكود قد يكون صعب قليلا ولكنه مهم في هذة العملية ببساطة سوف نقرأ كل محتويات المجلدات وبعدها نقوم بالتاكد ان صيغة الملف من احد الصغات التي قمنا بتعريفها بالاعلى وبعدها نقوم بعمل loop اخر عليهم ويقوم بطباعة كل الصور في الملجد الاول سوف يرمز للصور ب صفر والثاني بي 1 وهكذا كل ما ينتهي من مجلد يزيد القيمة ويطبع عدد الارقام بعدد القيم .

import os , cv2

base_path = os.path.join(os.getcwd() , "dataset")
extentions = ["pgm" , "png" , "jpg" , "png" , "jpeg"]
image_buffer = []
ids_buffer = []
tracked_id = 0
for folder_name in os.listdir(base_path) :
    folder_path = os.path.join(base_path , folder_name)
    if os.path.isdir(folder_path) :
        for image_name in os.listdir(folder_path) :
            image_path = os.path.join(folder_path , image_name)
            #geecoder.png > ['geecoder','png'] > Png > png
            print(image_path)
            image_ext = image_name.split(".")[-1].lower()
            if os.path.isfile(image_path) and image_ext in extentions :
                # image = cv
imread(image_path , 0) = imread + cvColor Gray
                image = cv2.imread(image_path)
                if not (image_name is None) :
                    image = cv2.cvtColor(image , cv2.COLOR_BGR2GRAY)
                    image = cv2.resize(image,(168,120))   # Resize (optional)
                    image_buffer.append(image)
                    ids_buffer.append(tracked_id)
        tracked_id +=1
print(ids_buffer)


كيفية معرفة اسم شخص معين من خلال صورته باستخدام بايثون

كيفية معرفة اسم شخص معين من خلال صورته باستخدام بايثون

تخيل انه لديك مجموعه من الملفات وكل ملف به مجموعه من اوجه المستخدمين وكل ملف باسم صاحب الصورة وتريد عمل برنامج تضع به الصورة يخبرك باسم صاحب الصورة , لذلك سفو نقوم بالتجربة على احد الصورة التي نمتلكها , بعد ان نعرف كل محتويات الصور الموجوده في الملفات سوف نضعهم في array وبعدها ناخذ معلومات الصورة ونخرجها في ملف xml وقم بعدها بطباعة اسماء المجلدات والتي رمزنا لها باسم users .


قم الان بإنشاء كلاس جديد نقوم بالتحربة عليه ونضع به المخرجات التي ظهرت لنا من الكود السابق في متغير لكي تكون هي اسماء المجلدات التي سوف يعمل عليها , وبعدها سوف نقوم بوضع مسار الصورة التي نريد معرفة صاحبها وبعدها نحول هذة الصورة الى gray عن طريق وضع اسم الصورة بعدها 0 هي نفس الطريقة السابقه التي كانت COLOR_BGR2GRY نفس الطريقة تقريبا ولكن اوفر في الكود بعدها ياتي بالمحتويات ويطبعها لنا .


import os , cv2
import numpy as np

base_path = os.path.join(os.getcwd() , "dataset")
extentions = ["pgm" , "png" , "jpg" , "png" , "jpeg"]
image_buffer = []
ids_buffer = []
tracked_id = 0
users = []
for folder_name in os.listdir(base_path) :
    folder_path = os.path.join(base_path , folder_name)
    if os.path.isdir(folder_path) :
        for image_name in os.listdir(folder_path) :
            image_path = os.path.join(folder_path , image_name)
            #geecoder.png > ['geecoder','png'] > Png > png
            image_ext = image_name.split(".")[-1].lower()
            if os.path.isfile(image_path) and image_ext in extentions :
                # image = cv2.imread(image_path , 0) = imread + cvColor Gray
                image = cv2.imread(image_path)
                if not (image_name is None) :
                    image = cv2.cvtColor(image , cv2.COLOR_BGR2GRAY)
                    # image = cv2.resize(image,(168,120))   # Resize (optional)
                    image_buffer.append(image)
                    ids_buffer.append(tracked_id)
        users.append(folder_name)
        tracked_id +=1

ids = np.asarray(ids_buffer)
face_classifier = cv2.face.LBPHFaceRecognizer_create()
face_classifier.train(image_buffer , ids)
face_classifier.save("face.xml")
print(users)



# -------------- another class

import cv2

users = ['yaleB01', 'yaleB02']
smaple_image = r"dataset\yaleB01\yaleB01_P00A-010E+00.pgm"
image_gray = cv2.imread(smaple_image , 0)
face_recognizer = cv2.face.LBPHFaceRecognizer_create()
face_recognizer.read("face.xml")
idx , distance = face_recognizer.predict(image_gray)
print(users[idx])


كيفية معرفة اسم الشخص من خلال الكاميرا

كيفية معرفة اسم الشخص من خلال الكاميرا

هذا نفس فكرة الكود السابق ولكن السابق كنا نمرر له صورة ويخبرنا هي من اي ملف وهذا يستقبل الصورة من كاميرا الجهاز مباشرة ولكن ما يعيبه انه يجب ان تكون الصورة نفسها نفس الموجوده في صور الملف الذي يحتوي على الصور اذا اختلف شيئ بسيط فلن يعمل معك .


						# --- main project --- #
import os , cv2
import numpy as np

base_path = os.path.join(os.getcwd() , "dataset")
extentions = ["pgm" , "png" , "jpg" , "png" , "jpeg"]
image_buffer = []
ids_buffer = []
tracked_id = 0
users = []
for folder_name in os.listdir(base_path) :
    folder_path = os.path.join(base_path , folder_name)
    if os.path.isdir(folder_path) :
        for image_name in os.listdir(folder_path) :
            image_path = os.path.join(folder_path , image_name)
            #geecoder.png > ['geecoder','png'] > Png > png
            image_ext = image_name.split(".")[-1].lower()
            if os.path.isfile(image_path) and image_ext in extentions :
                # image = cv2.imread(image_path , 0) = imread + cvColor Gray
                image = cv2.imread(image_path)
                if not (image_name is None) :
                    image = cv2.cvtColor(image , cv2.COLOR_BGR2GRAY)
                    # image = cv2.resize(image,(168,120))   # Resize (optional)
                    image_buffer.append(image)
                    ids_buffer.append(tracked_id)
        users.append(folder_name)
        tracked_id +=1

ids = np.asarray(ids_buffer)
face_classifier = cv2.face.LBPHFaceRecognizer_create()
face_classifier.train(image_buffer , ids)
face_classifier.save("face.xml")
users= ",".join(users)

with open("data.txt" , "w") as file : 
    file.write(users) 

                           # --- another project --- #

import cv2
import os
with open("data.txt" , "w") as file : 
    users = file.read().split(",")

cv2_base = os.path.dirname(cv2.__file__)
target_file = os.path.join(cv2_base ,"data" , "haarcascade_frontalface_alt.xml")
face_calssifire = cv2.CascadeClassifier(target_file)
face_recognizer = cv2.face.LBPHFaceRecognizer_create()
face_recognizer.read("face.xml")
fr = 10
cam=cv2.VideoCapture(0)
while cam.isOpened() :
    vaild , image = cam.read()
    if vaild :
        gray_image = cv2.cvtColor(image , cv2.COLOR_BGR2GRAY )
        face = face_calssifire.detectMultiScale(gray_image,minSize=(80,80))
        for x , y , w , h in face :
            s1 = (x,y)
            s2 = (x+w , y+h)
            cv2.rectangle(image , s1 , s2 , (255,0,0) , 2)
            face_image = gray_image[y: y+h , x:x+w]              # cut face
            resize_image = cv2.resize(face_image , (168,192))
            idx , distance = face_recognizer.predict(smaple_image)
            if distance < 0.2 :
                print(users[idx])

    cv2.imshow("test" , image)
    key = cv2.waitKey(1000//fr)
    if key == ord('q') :
        break

cam.release()
cv2.destroyAllWindows()


كيفية عمل filter على الصور بواسطة بايثون

كيفية عمل filter على الصور بواسطة بايثون

لكي تقوم بعمل فلتر على الصور بالبايثون عباره عن مجموعه من القيم التي سوف نضعها داخل array لكي نشاهدها وهذة صورة قمت بعمل لها فلتر بالبايثون عن طريق الكود التالي وتستطيع تغيير القيم التي بداخل الarray لتغير معك شكل الفلتر الذي على الصور .



import cv2
import numpy as np

kernal = np.array([
[0,-1,0],
[-1,4,-1],
[0,-1,0] 
])

img =  cv2.imread("panda.jpg")
# kernal = 1/90 * 
gry_image = cv2.cvtColor(img , cv2.COLOR_BGR2GRAY )
resize = cv2.resize(gry_image , dsize=(400,350))
filter = cv2.filter2D(resize , cv2.CV_64F , kernal )
show = cv2.imshow("",filter)
key = cv2.waitKey(0)


الى هنا تكون انتهت مقالة البايثون المتتعه هذة , نتمنى ان تكون المقالة نالت على اعجابكم وتكون استفدتم منها ولا تنسى تصفح القسم المتخص بهذة اللغة ولمزيد من الاكواد في البايثون يمنك مشاهدة المقالات السابقة في الموقع


الاكواد والصور : google drive

تعليقات