Cnn for Combination of both digits and letters(small and capital)
As for me, the easiest path to what you are asking for is generating them yourself.
An Example
I usually grab some TTF fonts and put them into a directory so that I have variety for character identification.  Begin by importing dependencies and creating a generator function:
from PIL import Image, ImageDraw, ImageFont
from os import listdir

WIDTH       =   200
HEIGHT      =   100
MINX        =    20
MINY        =    20
MAXX        =    WIDTH-60
MAXY        =    HEIGHT-60
MINSIZE     =    24
MAXSIZE     =    48

fonts = [i for i in filter(lambda i:i[-3:]==&quot;ttf&quot;, listdir(&quot;../data/fonts&quot;))]

def generate_character_image():
    fonts = [i for i in filter(lambda i:i[-3:]==&quot;ttf&quot;, listdir(&quot;../data/fonts&quot;))]
    charset=list(&quot;0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;)
    while 1:
        img = Image.new('RGB', (WIDTH,HEIGHT), color = (255,255,255))
        font = ImageFont.truetype(f'../data/fonts/{fonts[randrange(len(fonts))]}', randrange(MINSIZE,MAXSIZE))
        canvas = ImageDraw.Draw(img)
        where = (randrange(MINX,MAXX), randrange(MINY,MAXY))
        character = charset[randrange(len(charset))]
        coords = canvas.textbbox(where, character, font)
        # The coordinates are the top left corner
        bounding_box = (coords[0], coords[1], coords[2]-coords[0], coords[3]-coords[1])
        #canvas.rectangle(coords, outline=0, width=1)
        canvas.text(where, character, font=font, fill=(0,0,0), anchor=&quot;la&quot;)
        yield (character, coords, img)

for i in range(5):
    character,coords,image = next(generate_captcha())
    print(f&quot;{character} is in Bounding Box: {coords}&quot;)
    display(image)
    print(image)

You can then use this to generate an infinite number of training samples pretty trivially.
Why This Might Be Good
Personally, I prefer to generate my datasets whenever possible.  It allows me to do the following:

Train without ever repeating a sample
The validation data changes every time (in fact, I'll often not bother with a validation step since every epoch uses different data)
Zero storage required

Hope this helps!