5 simple steps to auto-rotate the image to get the right angle in the human photos using computer vision?
The above image showed the input(left) and output(Right). Let’s see how to auto-rotate the image without manual rotation.
These days computer vision evolved so much all over the world. I just played and implemented a small technique to auto-rotate images using computer vision.
Steps to auto-rotate the images
- Read the input image.
- Detect Face by Caffe model.
- If the face is not detected then rotate the image.
- Again detect face with rotated images.
- Rotate the image with three angles until face detect.
Before going to implement this technique we will see what are the dependency library and model needed.
- OpenCV
- Numpy
- Caffe model(Deep learning)
Step 1:- Import all the above-required libraries.
import cv2
import numpy as np
Step 2:- Download the Caffe model and file and prototxt file. Let us see why we need those two files and what is that?
What is the Caffe model file?
Caffe is a deep learning framework developed by the Berkeley Vision and Learning Center (BVLC). It is written in C++ and has Python and Matlab bindings. After training the model with our data set, we will get the trained model in a file with an extension.
What is deploy.prototxt file?
The prototxt is a text file that holds information about the structure of the neural network: A list of layers in the neural network. The parameters of each layer, such as its name, type, input dimensions, and output dimensions. The connections between the layers. That prototxt file is only to deploy the model and cannot be used to train it.
Rotate Angle -> 90 -> 180 -> 270
def main():
frame = cv2.imread(‘6.jpg’)
original_status = detect_face(frame)
(h, w) = frame.shape[:2]
# calculate the center of the image
center = (w / 2, h / 2)
scale = 1.0
angle_90 = 90
angle_180 = 180
angle_270 = 270
if original_status is None:
status_90 = rotate_image(frame,center,scale,angle_90)
if status_90 is None:
status_180 = rotate_image(frame,center,scale,angle_180)
if status_180 is None:
status_270 = rotate_image(frame,center,scale, angle_270)
Step 4:- Here is the detect_face method to detect face using the Caffe model. We can use OpenCV dnn module to read Caffe models using the readNetFromCaffe method. Then convert our image into the blob to pass neural network based on output weight it will return probability values. I have used 0.7 as min accuracy values. if the value is more than that we can detect face images. The Caffe model was trained by right angle faces images so it will detect only if the face image is the correct angle.
def detect_face(frame):net = cv2.dnn.readNetFromCaffe(‘deploy.prototxt’, ‘res10_300x300_ssd_iter_140000.caffemodel’)
(h, w) = frame.shape[:2]blob = cv2.dnn.blobFromImage(cv2.resize(frame,(300,300)), 1.0, (300,300), (104.0,177.0,123.0))net.setInput(blob)faces = net.forward()for i in range(0, faces.shape[2]):
confidence = faces[0,0,i,2]
if confidence < 0.7:
continuebox = faces[0,0,i,3:7] * np.array([w,h,w,h])
(startX, startY, endX, endY) = box.astype(‘int’)text = “face “ + “{:.2f}%”.format(confidence * 100)cv2.imwrite(‘test.jpg’,frame)
return True
Step 5:-Let us see how to rotate the image using OpenCV.
def rotate_image(frame,center,scale,angle):
(h, w) = frame.shape[:2]
M = cv2.getRotationMatrix2D(center, angle, scale)
frame = cv2.warpAffine(frame, M, (h, w))
return detect_face(frame)
Conclusion
That’s it. You made it!! Finally, you can see the correct angle image
Happy Learning to all!! if you need any help or assistance please contact sales@aibots.my