আমি মুখের অবস্থানের ভিত্তিতে ফসলের ব্যাচটি কীভাবে করব?


13

আমি একটি ইভেন্ট থেকে 12,000 ফটো পেয়েছি যেখানে প্রতিটি ফটোতে কেবল একজনই আছেন। তৃতীয় অংশের নিয়ম প্রয়োগ করতে আমার এই ফটোগুলি ক্রপ করতে হবে। এই সমস্তগুলি স্বতন্ত্রভাবে করার ধারণাটি হতাশাব্যঞ্জক photo

এই ব্যক্তির অবস্থানের উপর ভিত্তি করে এই সমস্ত ফটো স্বয়ংক্রিয়ভাবে ক্রপ করার কোনও উপায় আছে কি?


2
এটি কি ফটোশপের সাথে থাকতে হবে? আপনি যদি প্রোগ্রামিং করতে পারদর্শী হন তবে আপনি ম্যাথমেটিকা ​​বা পাইথন স্ক্রিপ্টের সাথে পরিচালনা করতে পারেন। সম্ভব হলে সমস্যা / বৈসাদৃশ্য / ইত্যাদি চিত্রিত করতে দুটি ছবি যুক্ত করুন।
3'17 এ বোঝা গেল

আপনি যদি চিত্রম্যাগিকের সাথে পরিচিত হন তবে এটি যা আপনার সন্ধান করছেন তা করা উচিত। stackoverflow.com/questions/4813608/…
নেহাল দত্তানী

আমি ওপেনসিভি এবং পাইথন ব্যবহার করে অনুরূপ কিছু চেষ্টা করেছি। আপনি যদি এই দিকটি থেকে ঠিক থাকেন তবে আমি আমার স্ক্রিপ্ট একটি উত্তরে রেখে দিতে পারি।
agtoever

এটি ফটোশপ হতে হবে না, আমি এই সমাধান চেষ্টা করব!
নাগরিক

উত্তর:


15

এখানে একটি সমাধান ব্যবহার করে pythonএবং opencv:

এটি left, right, top, bottomভেরিয়েবল দ্বারা নির্দিষ্ট প্যাডিং সহ আপনি যে কোনও ফোল্ডারে এটি চালাচ্ছেন সেটিতে জেপিগ ফটোগুলিতে পাওয়া সমস্ত মুখগুলি কাটবে :

import cv2
import sys
import glob 

cascPath = "haarcascade_frontalface_default.xml"

# Create the haar cascade
faceCascade = cv2.CascadeClassifier(cascPath)

files=glob.glob("*.jpg")   
for file in files:

    # Read the image
    image = cv2.imread(file)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # Detect faces in the image
    faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.1,
        minNeighbors=5,
        minSize=(30, 30),
        flags = cv2.cv.CV_HAAR_SCALE_IMAGE
    )

    print "Found {0} faces!".format(len(faces))

    # Crop Padding
    left = 10
    right = 10
    top = 10
    bottom = 10

    # Draw a rectangle around the faces
    for (x, y, w, h) in faces:
        print x, y, w, h

        # Dubugging boxes
        # cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)


    image  = image[y-top:y+h+bottom, x-left:x+w+right]

    print "cropped_{1}{0}".format(str(file),str(x))
    cv2.imwrite("cropped_{1}_{0}".format(str(file),str(x)), image)

ব্যবহার করা

উপরের স্ক্রিপ্টটি ব্যবহার করার জন্য আপনার প্রয়োজন pythonএবং opencvইনস্টল করা হয়েছে ( opencvআপনার প্ল্যাটফর্মের জন্য কীভাবে ইনস্টল করবেন তা কেবল গুগল )।

তারপরে উপরের কোডটি .pyফাইল "autocrop.py"বা অন্য কিছু হিসাবে সংরক্ষণ করুন , তারপরে এই ফাইলটি ডাউনলোড করুন এবং সংরক্ষণ করুন এবং আপনার চিত্রগুলির মতো একই ডিরেক্টরিতে রেখে দিন।

স্ক্রিপ্টে .jpgফোল্ডারে সমস্ত ফাইল সন্ধান করা উচিত এবং পাইথন কোডে সেট করা প্যাডিং সেটিংসের ভিত্তিতে সেগুলি ক্রপ করা উচিত ।

উদাহরণ:

উপরের কোডটি 10 ​​পিক্স প্যাডিংকে নাটকীয় হিসাবে সেট করে, এখানে উত্স এবং ফলাফল:

এখানে চিত্র বর্ণনা লিখুন

ফলাফল:

এখানে চিত্র বর্ণনা লিখুন

আমি নির্লজ্জভাবে অভিযোজিত টিউটোরিয়ালটি এখানে:

https://realpython.com/blog/python/face-recognition-with-python/

এই টিউটোরিয়ালটি আমার চেয়ে সমস্ত কিছু ব্যাখ্যা করার চেয়ে অনেক ভাল। মূলত আমি সেই কোডটি নিয়েছি এবং সামান্য কিছুটা ব্যাচ-প্রক্রিয়া স্টাফগুলিতে যুক্ত করেছি (ফাইলের নাম লিখার পরিবর্তে) এবং পরে এটি ক্রপ করতে এবং একটি আয়তক্ষেত্র আঁকতে এবং চিত্র প্রদর্শনের পরিবর্তে সংরক্ষণ করতে বলেছি।


1
Python3 জন্য: 1. pip install opencv-python, 2. আপডেট সব printবিবৃতি প্রথম বন্ধনী, 3 পরিবর্তন ব্যবহার করতে cv2.cv.CV_HAAR_SCALE_IMAGEকরতে cv2.CASCADE_SCALE_IMAGE: (উৎস stackoverflow.com/a/36243142/2125392 )
CivFan

3

দাবি অস্বীকার: আমি এই সরঞ্জামটির বিকাশকারী।

আপনি বাল্কের ফটোগুলি থেকে মুখগুলি শনাক্ত করতে এবং ক্রপ করার জন্য ফেস ক্রপ জেট ব্যবহার করতে পারেন any কোনও ফর্ম্যাট বা আকারের চিত্রগুলি সমর্থনযোগ্য Face

সফটওয়্যারটি http://www.facecropjet.com থেকে ডাউনলোড করা যায়

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.