Определение по картинке?
По поводу сравнения картинок
from skimage.metrics import structural_similarity
import cv2

def orb_sim(img1, img2):
  orb = cv2.ORB_create()
  kp_a, desc_a = orb.detectAndCompute(img1, None)
  kp_b, desc_b = orb.detectAndCompute(img2, None)
  bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)

  matches = bf.match(desc_a, desc_b)
  similar_regions = [i for i in matches if i.distance < 50]  
  if len(matches) == 0:
    return 0
  return len(similar_regions) / len(matches)


img1 = cv2.imread('test_img1.jpg', 0)
img2 = cv2.imread('test_img2.jpg', 0)
orb_similarity = orb_sim(img1, img2)
print(f"Фото схожи на:  {orb_similarity}")
Код достаточно хорошо работает с необработанными изображениями. 
И по поводу распознавания текста, конечно можно, полно уже готовых решений,  OpenCV и Гугл в помощь
Проверить одинаковые ли картинки можно с помощью Pillow
Кодfrom PIL import Image

#Открываем картинки

img1 = Image.open("img1.png")
img2 = Image.open("img2.png")

def same_imgs(img1, img2):
    size1 = img1.size #Получаем размер картинки (ширина, высота)
    pixels1 = []
    for x in range(size1[0]):
        for y in range(size1[1]):
            pixels1.append(img1.getpixel((x, y))) #Добавляем цвета по каждой координате

    size2 = img2.size #Получаем размер картинки (ширина, высота)
    pixels2 = []
    for x in range(size2[0]):
        for y in range(size2[1]):
            pixels2.append(img2.getpixel((x, y))) #Добавляем цвета по каждой координате

    if pixels1 == pixels2: #Проверяем равны ли все цвета
        return True
    else:
        return False

print(same_imgs(img1, img2))

img1.close()
img2.close()