Search code examples
pythonmodelocropencv

How to take the input as an image instead of taking input from the camera in python


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


Solution

  • 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