Let’s learn art by transforming The Art Book into a spaced-repetition Anki Deck.
Step 1: Download The Art Book
Get the PDF of this book and save it as TheArtBook.pdf

Step 2: Make an image of each page
Let’s use python and a library called pdf2image does what it says on the tin: saves each page as eg page5.jpg.
pip install pdf2image
pages = convert_from_path('TheArtBook.pdf')
for idx,page in enumerate(pages):
page.save('page'+str(idx)+'.jpg', 'JPEG')

Step3: Crop Images into Text, Painting
Let’s use another Python library PIL to crop images into their text and painting parts and save as eg page5-text.jpg for the text and page5-painting.jpg for the image. There are pages 5 to 502.
from PIL import Image
for page in range(5, 503):
im = Image.open(r"page" + str(page) + ".jpg")
width, height = im.size
left = 0
top = 0
right = width
bottom = 300
im1 = im.crop((left, top, right, bottom))
im1 = im1.save("page" + str(page) + "-text.jpg")
im2 = im.crop((left, 300, right, height-80))
im2 = im2.save("page" + str(page) + "-painting.jpg")

Step 4: Anki with Python
Let’s use the Python library genanki to create Anki decks and cards for us in Python. Install:
pip install genanki
Copy the Images into the Anki media folder:
~/.local/share/Anki2/User\\ 1/collection.media/
Create an Anki Deck, a Model with Painting as the Question and Text as the Answer, and create a package that can be opened in Anki:
import genanki
# Model of note tempalte with Question = Image and Answer = Text
my_model = genanki.Model(
1091735104,
'Simple Model with Media',
fields=[
{'name': 'QuestionMedia'},
{'name': 'AnswerMedia'},
],
templates=[
{
'name': 'Card 1',
'qfmt': '<img src="{{QuestionMedia}}"/><br>',
'afmt': '{{FrontSide}}<hr id="answer"><img src="{{AnswerMedia}}"/>',
},
])
# Make a deck
my_deck = genanki.Deck(
2059400110,
'The Art Book')
# Init package and media package
my_package = genanki.Package(my_deck)
my_package.media_files = []
# Loop pages and create notes, add to deck
for page in range (5, 503):
my_note = genanki.Note(
model=my_model,
fields=['page' + str(page) + '-painting.jpg',
'page' + str(page) + '-text.jpg'])
my_deck.add_note(my_note)
# Get media assets
for page in range (5, 503):
my_package.media_files.append('page' + str(page) + '-text.jpg')
my_package.media_files.append('page' + str(page) + '-painting.jpg')
# Make actual packge to import into Anki
my_package = genanki.Package(my_deck)
my_package.write_to_file('TheArtBook.apkg')
# genanki.Package(my_deck).write_to_file('TheArtBook.apkg')
Step 5: Use Anki to learn art!
Open the TheArtBook.apkg package in Anki from File -> Import or launch from the command line:
anki TheArtBook.apkg
Now we have a deck for 502 famous pieces of Art we can learn to name using spaced repetition:

Contact: [email protected]
2 thoughts on “Learning Art Using Python and Anki”