You need to wire up an optical character recognition program (e.g. https://github.com/tesseract-ocr/tesseract) to read the text from images, and then couple that with a search tool.
See https://kitchingroup.cheme.cmu.edu/blog/2015/07/24/Indexing-text-in-screenshots-so-they-are-searchable/ for an example of how it might work.
If you have a lot of images, I guess you would want to cache the results somehow, so you don't have to find all the images, then do OCR, then search each time.
Here is a proof of concept that is lightly tested. This finds images (png and jpg) in the current directory (and below), runs each one through tesseract and captures the string, and then uses completion to search (I use ivy, which makes it pretty easy), then opens the image you select.
(require 'f)
(let* ((candidates (cl-loop for f in (f-files "." (lambda (f)
(member (file-name-extension f)
'("png" "jpg")))
t)
collect
(cons (shell-command-to-string
(format "tesseract %s -" f))
f)))
(choice (completing-read "Query: " candidates)))
(find-file (cdr (assoc choice candidates))))
I would not use this on your file system, it would probably take a long time to do that. Instead, you would want to save the strings to some intermediate database, and then search the database.