I want to take the input as an image instead of taking input from the camera. in this code i am taking the input from the camera. But i want to take the input from an image which is in a folder. How to do that. Here is my code
I am going to input images for pre trained model and get the output. This is a OCR project. I have trained the model. In this code the input image is getting from the camera. But i want to give the image from a file, not from the camera. How to do that....
import numpy as np
import cv2
import pickle
from tensorflow.python.keras.models import load_model
###parameterrs###
width = 640
height = 480
threshold = 0.65
#threshold means minimum probability to classify
#this is the code for creatinng the image objrct
imageObj=cv2.imread("SinhalaDataSet/1/img0_0.png")
#this is the code for creatinng the camera objrct
capture = cv2.VideoCapture(0)
capture.set(3,width)
capture.set(4,height)
#here im loading the saved pretrained model
model = load_model('model.h5')
#thid is the code for processing
def preProcessing(img):
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img = cv2.equalizeHist(img)
img = img/255
return img
while True:
success, imgOriginal = capture.read()
img = np.asarray(imgOriginal)
img=cv2.resize(img,(32,32))
img = preProcessing(img)
cv2.imshow("Processsed Image",img)
img = img.reshape(1, 32, 32, 1)
#prediction
classIndex = int(model.predict_classes(img))
labelDictionary = {0: '0', 1: 'අ', 2: 'ඉ', 3: 'ඊ', 4: 'උ', 5: 'එ', 6: 'ඒ', 7: 'ඔ', 8: 'ක', 9: 'ක්', 10: 'කා',
11: 'කැ', 12: 'කෑ', 13: 'කි', 14: 'කී', 15: 'කු', 16: 'කූ', 17: 'කෙ', 18: 'කේ', 19: 'කො',
20: 'කෝ', 21: 'ඛ', 22: 'ග', 23: 'ගි', 24: 'ගී', 25: 'ගු', 26: 'ගූ', 27: 'ඝ', 28: 'ඟ', 29: 'ච',
30: 'ඡ', 31: 'ජ', 32: 'ජ්', 33: 'ජි', 34: 'ජී', 35: 'ඣ', 36: 'ඤ', 37: 'ඥ', 38: 'ට', 39: 'ඨ',
40: 'ඩ', 41: 'ඪ', 42: 'ණ', 43: 'ඬ', 44: 'ත', 45: 'ත්', 46: 'ථ', 47: 'ථි', 48: 'ථී', 49: 'ද', 50: 'දු',
51: 'දූ', 52: 'ධ', 53: 'න', 54: 'ඳ', 55: 'ප', 56: 'පු', 57: 'පූ', 58: 'ඵ', 59: 'බ', 60: 'භ',
61: 'ම', 62: 'ම්', 63: 'මි', 64: 'මී', 65: 'ඹ', 66: 'ය', 67: 'ර', 68: 'ල', 69: 'ව', 70: 'ව්', 71: 'වි',
72: 'වී', 73: 'වු', 74: 'වූ', 75: 'ශ', 76: 'ෂ', 77: 'ස', 78: 'හ', 79: 'ළ', 80: 'ළු', 81: 'ෆ',
82: 'ා'}
predictions = model.predict(img)
predictedLetter = labelDictionary.get(classIndex)
probabilityValue = np.amax(predictions)
print(predictedLetter, probabilityValue)
if probabilityValue > threshold:
cv2.putText(imgOriginal, str(predictedLetter) + " " + str(probabilityValue),
(50, 50), cv2.FONT_HERSHEY_COMPLEX_SMALL,
1, (0, 0, 255), 1)
cv2.imshow("Testing Window", imgOriginal)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
You can read an image from a file using the cv2.imread()
method:
import cv2
img = cv2.imread("image.png")
cv2.imshow("Image", img)
cv2.waitKey(0)
Similarly, you can allow the user to input the names of images:
import cv2
import os
imgs = []
while True:
file = input("Input filename >>> ")
if file == "QUIT":
break
if os.path.exists(file):
img = cv2.imread(file)
imgs.append(img)
else:
print("File not found.")
If you have a series of images you want to display, in the form of an animation, you can use the built-in glob
module to list all the needed images. For example, if you have 10 images in desktop that begins with image
, followed by a number and the image's extension, here is how you would go about looping through and displaying each image:
import glob
import cv2
for img in glob.glob("C:\\Users\\Username\\Desktop\\image*.png"):
cv2.imshow("Animation", img)
if cv2.waitKey(1) & 0xFF == ord("q"):
break