Turning a whole textbook into Anki flashcards with one click (including images)

Jake Romm
30 Dec 202314:01

Summary

TLDRThe video script narrates a medical trainee's quest to automate the conversion of textbooks into Anki flashcards for efficient study. Initially attempting to use custom GPTs for image and text extraction, the creator faced limitations and turned to Python with the help of a friend. After overcoming several coding challenges, including image extraction, text formatting, and regular expressions, the project culminated in a streamlined app that transforms entire textbooks into flashcards with a single click, enhancing study efficiency for medical students.

Takeaways

  • 🎥 The project started with an aim to automate the creation of flashcards from medical textbooks using custom GPTs.
  • 🕵️‍♂️ The creator discovered a method to import images into flashcards using HTML links, potentially streamlining the process.
  • 🚫 Despite initial optimism, the use of custom GPTs proved inefficient for processing large volumes of textbook content at once.
  • 🌟 The 'Holy Grail' goal was to convert an entire textbook into flashcards with a single click, enhancing study efficiency.
  • 📚 Textbooks in Radiology, with their standard format, were identified as ideal candidates for this automated conversion process.
  • 🛠️ The creator faced several challenges, including image extraction issues and the need for text formatting consistency across books.
  • 🔄 Regular expressions became a crucial tool for targeting specific text and segmenting documents for the flashcard creation.
  • 🤖 Chat GPT was utilized to assist in coding the project, despite the creator's initial lack of Python knowledge.
  • 📝 The project involved creating scripts for image extraction, text extraction, and CSV file conversion for Anki flashcard import.
  • 🔧 The creator had to refine the script to handle multiple cases per page and differences in textbook formatting within a series.
  • 💡 A breakthrough came with breaking down problems into basic parts, creating a uniform tagging system, and developing a common script pathway for processing different books.

Q & A

  • What was the initial goal of the project described in the script?

    -The initial goal was to create a custom GPT that could systematically process casebooks from Radiology textbooks, extracting text and images, and then organizing the data to create Anki flashcards.

  • Why was automating the image import into flashcards considered a significant breakthrough?

    -Automating the image import into flashcards was considered significant because it eliminated the need for manual copying and pasting of images, greatly reducing the time and effort required to create flashcards from textbooks.

  • What challenges did the creator face when trying to extract images from the textbook?

    -The creator faced challenges such as the image extractor script failing to recognize every case in the textbook, resulting in incomplete image extraction, and images having an inverted color scheme with no apparent pattern.

  • How did the creator address the issue of the image extractor script not recognizing every case?

    -The creator modified the script to ignore case numbers due to inconsistent formatting, which resolved the issue for most cases, except when two cases were presented on a single page.

  • What role did regular expressions play in the text extraction process?

    -Regular expressions were used to target specific text segments and ignore others, allowing the creator to extract only the desired portions of the text for the flashcards based on the consistent formatting of the casebooks.

  • Why was creating a JSON file with an inventory of images important for the text extractor script?

    -The JSON file with an inventory of images was important because it allowed the text extractor script to know how many HTML image links needed to be created for each case, ensuring that the number of images matched the text content.

  • What was the purpose of developing a uniform tagging system for the extracted information?

    -The uniform tagging system made it easier to manipulate and process the text consistently, reducing reliance on consistent formatting between different books in the series and allowing for easier application of the script to new textbooks.

  • How did the creator handle the issue of multiple cases presented on a single page?

    -The creator updated the image naming convention and included new logic in the image extractor script to determine when and how to separate pictures when they are presented in a multi-case format.

  • What was the final output of the project after addressing the various challenges?

    -The final output was a functional app that could process an entire textbook and turn it into flashcards with a single click, significantly streamlining the process of creating study materials from Radiology casebooks.

  • What did the creator learn about the limitations of their initial script and how did they plan to overcome them?

    -The creator realized that their initial script couldn't handle multiple cases on a single page and wasn't easily adaptable to different textbooks in the series. They planned to overcome these limitations by breaking down the problems into basic parts, addressing them individually, and then packaging the solutions into a common format that could be applied to any book in the series.

Outlines

00:00

📚 Automating Flashcard Creation with Custom GPTs

The narrator, a medical trainee, embarked on a project to automate the creation of Anki flashcards from textbooks, aiming to save time and streamline the process. Initially, they attempted to use custom GPTs to extract text and images from radiology case review books, which are highly recommended and organized in a standard format. The goal was to leverage HTML links to automatically import images into flashcards. Despite the challenges, including the limitations of the custom GPTs and the need to manually handle images, they discovered a potential solution using Python, a language they were unfamiliar with but sought help from a friend to learn.

05:03

🤖 Python Scripting to Extract and Organize Textbook Data

After realizing that chat GPT was not the right tool for the task, the narrator turned to Python, a programming language well-suited for data extraction. They downloaded a code editor, installed Python, and utilized the PyMuPDF library to extract images and text from PDFs. Facing several issues, such as image recognition problems, color inversion, and text extraction specificity, they employed regular expressions to target the desired text segments. They also developed a system to count images per case and generate HTML image links for flashcards. The process involved creating a CSV file from the extracted data, which could then be uploaded to Anki, resulting in functional flashcards from an entire textbook with minimal manual effort.

10:03

🛠 Refining the Script for General Applicability

Despite the initial success, the narrator identified limitations in their script, such as handling multiple cases on a single page and the need for modifications when incorporating new textbooks from the series. They decided to break down the problem into smaller parts, addressing them individually before integrating them into a common format. This approach allowed for a more general solution that could be applied across different books in the series. They developed a uniform tagging system for consistent text manipulation, updated the image naming convention, and created an app that could process an entire textbook into flashcards with a single click, significantly reducing the effort required for each new book.

Mindmap

Keywords

💡Custom GPTs

Custom GPTs refer to customized versions of Generative Pre-trained Transformers, a type of AI language model that can be fine-tuned for specific tasks. In the video, the creator is attempting to use these models to automate the process of turning medical textbooks into flashcards, which is central to the video's theme of leveraging technology for efficiency.

💡Medical Trainee

A medical trainee is a person undergoing medical education or training, often in a residency program. The script mentions the creator's perspective as a medical trainee, emphasizing the limited free time they have and the desire to use it effectively, which is the driving force behind the project described in the video.

💡Flashcards

Flashcards are a study aid consisting of cards with information on them, typically used for memorization and review. In this context, the creator aims to automate the creation of digital flashcards from medical textbooks, which is a key part of the project being discussed.

💡HTML Links

HTML links are used to connect different pages or resources on the web. The video describes a method of using HTML links to automatically import images into flashcards, which is a significant part of the technical solution the creator is exploring.

💡Anki

Anki is a popular open-source flashcard program using spaced repetition to help users memorize information more efficiently. The creator's goal is to integrate Anki with their custom flashcard creation process, which is a central theme in the video.

💡Radiology

Radiology is a medical specialty that uses imaging techniques to diagnose and treat diseases. The video mentions Radiology textbooks, which are the specific type of textbooks the creator is working with, and these are used as the basis for the flashcard content.

💡Python

Python is a widely-used high-level programming language known for its readability and versatility. The creator eventually decides to use Python to build an application for extracting images and text from PDFs, which is a pivotal moment in the video as it shifts from using AI to coding.

💡PDF

PDF stands for Portable Document Format, a file format used to present documents in a manner independent of application software, hardware, and operating systems. The script discusses extracting images and text from PDF textbooks, which is the primary task the creator is automating.

💡CSV File

A CSV file, or Comma-Separated Values file, is a type of file used to store tabular data, such as a spreadsheet or database. The creator's project involves converting the extracted data into a CSV file format that can be uploaded into Anki.

💡Regular Expressions

Regular expressions are a powerful tool used in programming for matching patterns in strings of text. In the script, the creator uses regular expressions to target and extract specific text from the medical textbooks for the flashcards.

💡JSON File

JSON, or JavaScript Object Notation, is a lightweight data-interchange format that is easy for humans to read and write and for machines to parse and generate. The video describes using a JSON file to store and access the count of images associated with each diagnosis.

💡Spaced Repetition

Spaced repetition is a learning technique that involves increasing intervals of time between subsequent review of previously learned material to exploit the psychological spacing effect. This concept is integral to how Anki operates and is mentioned in the context of the benefits of using Anki for studying.

Highlights

Project goal to automate the creation of Anki flashcards from medical textbooks using images and text.

Discovery of HTML links to automate image import into flashcards, eliminating manual copy-pasting.

Challenge of processing multiple cases from radiology textbooks into a standardized Anki format.

Innovative approach to use Python for data extraction and manipulation instead of relying on GPT.

Introduction of PyMuPDF, a Python library for extracting images and text from PDFs.

Struggle with image extraction due to inconsistent case number formatting in the textbook.

Solution to ignore case numbers and handle multiple cases on a single page.

Issue with inverted color scheme in extracted images and the decision to fix it post-extraction.

Utilization of regular expressions to target and segment specific text for flashcards.

Development of a method to count images per case for accurate HTML link generation.

Designing Anki note types to balance information availability and user experience.

Implementation of an image gallery feature in Anki for case review.

Inclusion of dropdown menus for questions and answers to enhance study flexibility.

Challenge of making the script adaptable to different textbooks in the series.

Epiphany to break down problems into basic parts for individual addressing.

Creation of a uniform tagging system to standardize text extraction across books.

Refinement of the image naming convention for consistency across different books.

Development of logic to handle multi-case image separation in the extractor script.

Packaging of individual scripts into a single app for one-click textbook to flashcard conversion.

Recognition of script limitations and the need for further refinement for broader applicability.

Transcripts

play00:02

[Music]

play00:20

[Music]

play00:22

I started out this project trying to

play00:23

film a video about the new custom gpts

play00:26

that came out a couple weeks ago I'm

play00:27

always trying to find ways to leverage a

play00:30

a to be able to reclaim the few precious

play00:32

hours of free time I have as a medical

play00:33

trainee so that I can spend time doing

play00:35

things that actually matter to me like

play00:37

spending time with my

play00:39

family I have a goal of turning all of

play00:41

the textbooks that are recommended by my

play00:43

residency into eny flashcards for me and

play00:46

my co-residents one of the most

play00:48

timeconsuming parts of this endeavor is

play00:50

taking the images from a textbook and

play00:52

pasting them into the flash cards that I

play00:55

create and I recently discovered that

play00:57

there's a way that you can automatically

play00:58

import images into flash cards by using

play01:01

HTML links as long as you're linking the

play01:03

file name exactly as it exists in the

play01:06

collection. media folder you can

play01:07

automatically populate your flashcards

play01:09

with images that means no need to

play01:11

manually copy and paste images ever

play01:13

again which would be freaking huge if I

play01:16

could figure this out I would be getting

play01:17

that much closer to being able to turn

play01:20

an entire textbook into flashcards with

play01:22

a single click which is like the Holy

play01:24

Grail of this quest to ankify everything

play01:28

now obviously this wouldn't necessarily

play01:30

work with every textbook and there's a

play01:33

lot of textbooks you really wouldn't

play01:34

want to do this with because they

play01:35

contain a lot of garbage you don't want

play01:37

in your flash cards but in Radiology we

play01:39

have these case review textbooks that

play01:41

are the perfect candidate for something

play01:43

like this and they come very highly

play01:44

recommended by our attendings because as

play01:47

they love to say the best way to see

play01:49

more cases is by taking a stab at some

play01:52

of these unknown cases from these case

play01:54

books these books are organized in a

play01:56

very standard format where the image or

play01:58

multiple images are presented along with

play02:00

a list of questions and then on the

play02:02

second page you have a diagnosis the

play02:04

answers to the questions and some extra

play02:06

comments about the condition in

play02:08

question and they all follow this format

play02:11

exactly almost exactly my goal is to

play02:14

make it so that we can study the content

play02:15

from these textbooks while also

play02:17

benefiting from the convenience and the

play02:19

space repetition that Anki offers so my

play02:22

plan was to create a custom GPT that

play02:23

would work through one of these

play02:25

casebooks systematically to extract the

play02:27

text place the closed deletions and

play02:29

would also link the appropriate images

play02:32

but it turns out that even with the

play02:33

custom gpts uh the best I could hope for

play02:36

would be to process these cases one to

play02:39

three cases at a time and I would still

play02:41

have to screenshot and save all of these

play02:43

images from the textbook which is way

play02:45

too cumbersome and honestly a far cry

play02:48

from the oneclick Holy Grail that I had

play02:50

envisioned well that project got put on

play02:52

hold for a couple weeks because I

play02:54

rotated onto nights and I worked 19 days

play02:57

in a

play02:57

row like And subscribe so so I can quit

play03:00

this stupid job anyways while I was

play03:02

actively dissociating on these long

play03:04

night shifts I had the realization that

play03:07

maybe this was not the right task for

play03:09

chat GPT I'm not really asking the

play03:11

chatbot to do any highle processing I'm

play03:13

just asking it to extract text and

play03:15

images and then organize that data in a

play03:17

specific way which at its core is really

play03:19

just data transfer there's got to be a

play03:21

simpler way to do this Well turns out

play03:24

this is the sort of thing that people

play03:25

have been using python to do for a long

play03:27

time and unfortunately

play03:30

I don't know anything about python but I

play03:34

do know somebody who does and he's my

play03:37

best friend

play03:38

so let's give him a call all right I may

play03:41

have abused this relationship in the

play03:43

past so I really don't know how this is

play03:46

going to

play03:48

[Music]

play03:50

go hello hey um I have something I need

play03:55

your help with how much does it pay what

play03:57

did you have in mind it's a python

play03:59

project I wanted to make an app that

play04:01

extracts images and text from a PDF

play04:04

textbook and puts it all into a CSV file

play04:07

that I can upload into Ani and create

play04:09

flashcards from it

play04:11

so how much does it pay just kidding

play04:14

that was uh not a real person that was

play04:16

chat

play04:19

GPT it is my best friend

play04:22

though and I have abused it so after a

play04:25

quick conversation with the chat bot I

play04:26

figured out that I needed to download a

play04:28

code editor the latest version of python

play04:30

and get access to pimu PDF which is a

play04:34

python library that helps you extract

play04:36

images and text from PDF documents what

play04:39

is a python Library honestly I'm not

play04:42

sure it sounds a lot like a book of

play04:44

magic spells it's got a bunch of

play04:46

pre-coded functions that you can use to

play04:49

build out your scripts like it makes it

play04:50

easier to do the magic stuff without

play04:52

having to come up with the spells from

play04:55

scratch every time armed with my book of

play04:57

spells I was ready to start building my

play04:59

app the game plan was as follows step

play05:02

one test out the image extractor to see

play05:05

if what I wanted to do was even possible

play05:07

step two design the eny not type so that

play05:09

I know how my final CSV would need to be

play05:11

structured and so I have a good end

play05:13

point in mind and because I was using

play05:15

chat GPT I had to get a working

play05:17

prototype as quickly as possible so that

play05:19

if I was going to fail I was going to

play05:21

fail quickly before I had invested a

play05:23

bunch of time into this project

play05:24

obviously I worked with chat GPT to Code

play05:26

100% of this project because I thought

play05:30

python was a snake a couple weeks ago or

play05:33

maybe a reference to my favorite movie

play05:35

while I was growing up so I created a

play05:37

custom GPT and gave it all the

play05:38

background information about what we

play05:40

would be trying to do as well as

play05:41

reminded it that it needs to treat me

play05:43

like a total Noob because that's what I

play05:45

am the first thing I did was test a

play05:47

script that extracted images from the

play05:49

textbook for a given page range which

play05:50

seemed to work fine I realized I was

play05:52

going to have to figure out a clever way

play05:54

of sorting and naming these images so

play05:55

that they were all associated with the

play05:57

appropriate case but before I could even

play05:59

even really finish that thought I had

play06:01

encountered my first problem the image

play06:02

extractor script was failing to

play06:04

recognize every case in the textbook and

play06:06

thus failing to extract all the images

play06:08

from the text this was happening because

play06:10

of the way the case numbers were

play06:12

formatted there were a bunch of spaces

play06:13

in between each number and I wasn't

play06:15

going to end up using the case numbers

play06:17

anyways so I just told the script to

play06:19

completely ignore the case numbers and

play06:22

this seemed to fix the issue well it

play06:24

fixed the issue except for when there

play06:26

were two cases presented at once on a

play06:28

single page

play06:29

which I'll get to that later the second

play06:32

major issue I had was that a lot of the

play06:33

images I was extracting looked like they

play06:35

had been inverted the color scheme was

play06:37

inverted and there was no Rhyme or

play06:39

Reason to it and so I figured it would

play06:41

be easier to fix this in eny after I had

play06:45

imported all the cards and stuff so I

play06:48

figured I would just table this for now

play06:49

and deal with it later the third problem

play06:52

I had was getting the text extractor

play06:54

script to ignore certain parts of the

play06:57

text and only grab the portions of the

play06:58

text that I I really wanted to be in the

play07:00

flashcards this is where I learned a lot

play07:02

about regular Expressions which would

play07:04

soon become the entire backbone of this

play07:06

script a regular expression is a way of

play07:08

targeting specific text as well as

play07:09

segmenting your document I was able to

play07:12

use the consistent formatting of these

play07:14

cases to my advantage and Target only

play07:16

the specific text that I wanted this way

play07:19

it ignored all the other texts that I

play07:20

really didn't care for and didn't really

play07:22

need the fourth major issue that I

play07:23

encountered was that I needed an

play07:25

automated way to count how many images

play07:27

were in each case and be able to

play07:29

communicate at that to the text

play07:30

extractor script that I had written so

play07:32

that it could generate the appropriate

play07:33

number of HTML image links within each

play07:36

case chat GPT suggested having the image

play07:38

extractor script count all the images

play07:41

and then associate them with the

play07:42

diagnosis and then put all that

play07:44

information into a Json file which the

play07:47

text extractor script could then access

play07:49

and then know how many HTML links it

play07:51

needed to create for each case which

play07:53

works perfectly I could tell I was

play07:55

getting really close to having a fully

play07:57

functional script so I extracted a few

play07:59

few practice cases in order to get my

play08:01

eny note type totally dialed in I didn't

play08:03

want people to feel really overwhelmed

play08:05

with all the information that each card

play08:07

would contain but I still wanted it to

play08:09

be readily available if they wanted to

play08:11

reference it so they didn't have to go

play08:13

back and look it up in the book I knew

play08:14

that I definitely needed some sort of

play08:16

image gallery to be able to review all

play08:17

of the images so that when you looked at

play08:19

a case that had a bunch of images it

play08:21

wasn't super annoying to review this is

play08:23

also where I fixed the issue I was

play08:24

having with a lot of the images

play08:26

inverting the colors randomly I just

play08:28

went ahead and added an inversion button

play08:30

so that you could flip the color

play08:32

inversion on the images that you wanted

play08:34

to it's actually useful to have the

play08:36

ability to invert images and Radiology

play08:38

so it's kind of a two for one tool I

play08:40

decided that the questions and answers

play08:41

should appear in drop down menus to give

play08:43

people the option to study them that way

play08:45

they wouldn't clutter up the flash card

play08:46

if they weren't in use and it made the

play08:47

most sense to have the diagnosis

play08:49

contained within the Clos deletion since

play08:52

that was the most important information

play08:53

that I was testing anyways some other

play08:55

issues that I faced while I was trying

play08:56

to fine-tune this enky not type was I

play08:59

had to figure out how to add extra

play09:00

fields which ended up being pretty easy

play09:03

I just had to look in the eny manual

play09:06

there's basically no limit to the number

play09:07

of fields you can create which is pretty

play09:09

cool another issue I had was getting the

play09:11

images to actually show up within the

play09:13

flashcards turns out you have to have

play09:14

this little button checked here this

play09:16

allows there to be HTML within the

play09:18

fields in the flash card another issue I

play09:20

was having was getting the images to

play09:21

show up within the image gallery I fixed

play09:23

this by assigning a class group within

play09:25

the CSV file so that the JavaScript

play09:28

Gallery actually

play09:29

recognize the images as an object it

play09:31

could pull in and after about a week of

play09:33

working on this project for a couple

play09:35

hours in the morning before heading to

play09:36

work I had two functional scripts the

play09:39

image extractor script pulled all the

play09:41

images out of the textbook named them

play09:43

appropriately and also generated a Json

play09:45

file with an inventory of how many

play09:46

images went with each diagnosis that

play09:49

could be accessed by my text extractor

play09:50

script the text extractor script was

play09:53

very impressive in my humble opinion it

play09:55

extracted the diagnosis and placed

play09:57

closed letion around them Ely organized

play09:59

the questions and answers as well as

play10:01

generated the exact number of image

play10:03

links that matched the file names

play10:05

perfectly it corrected the formatting

play10:06

issues and made sure everything was

play10:08

neatly separated so that it would line

play10:10

up with the fields in my eny note type I

play10:12

then created a simple script that would

play10:13

convert the output from the text

play10:15

extractor script into a CSV file which I

play10:17

could automatically upload into Anki and

play10:20

after that I had perfectly functioning

play10:21

flashcards which I had created from an

play10:23

entire textbook in just a couple of

play10:25

clicks

play10:26

well almost an entire textbook book my

play10:29

script still had some major flaws

play10:31

unfortunately one issue with my script

play10:34

was that it really couldn't handle the

play10:36

instances where there were multiple

play10:37

cases presented on a single page now

play10:40

this really wasn't that big of an issue

play10:42

in this textbook because there were only

play10:44

eight instances of that or 16 cases of

play10:47

that but in some of the other books in

play10:49

the series almost every single page has

play10:52

multiple cases on it so it would be a

play10:54

major issue moving forward also even

play10:56

though these textbooks are formatted

play10:58

very similarly

play10:59

they're not exactly the same ideally

play11:02

this script would be able to be used on

play11:04

all of the books in the series but the

play11:06

way it's written currently I'd have to

play11:08

make significant modifications each time

play11:10

I Incorporated a new textbook from the

play11:12

series for example none of the other

play11:15

textbooks include the diagnosis colon

play11:17

text in any of the

play11:19

cases which is kind of an important part

play11:22

of the script currently I created

play11:24

something really cool that feels like a

play11:26

real life cheat code but but it loses

play11:29

its utility almost immediately if it's

play11:32

not more generally applicable and able

play11:34

to be used with all the other books in

play11:35

the series so I decided I couldn't stop

play11:39

there over the next couple days I would

play11:41

read the official python standard

play11:42

Library um in whatever downtime I had at

play11:45

work throughout the day I would think of

play11:47

potential solutions to the problems that

play11:49

I was encountering and also trying to

play11:51

anticipate any other problems I might

play11:52

encounter as I tried to fix my script

play11:54

and eventually I had an epiphany I

play11:56

didn't have to create a script that

play11:58

would solve all my problems at once I'm

play12:00

way too much of a noob to be able to

play12:01

write something as sophisticated as that

play12:03

so instead I decided I would try to

play12:05

break down my problems into the most

play12:07

basic parts possible then I could

play12:10

address them individually and then

play12:11

package up all the pieces into a common

play12:13

format that was much easier to work with

play12:15

and that would allow me to get the

play12:16

results I was after I took this New

play12:18

Perspective and a fresh box of Diet Coke

play12:20

and Mountain Dew and got back to

play12:27

work

play12:32

[Music]

play12:42

I took a closer look at all the books in

play12:44

this case review series and identified

play12:46

what all the common elements were these

play12:48

were the best targets for my regular

play12:49

Expressions I developed a uniform

play12:51

tagging system that I could Ed to label

play12:53

each piece of information that I was

play12:55

extracting it made it much easier to

play12:57

manipulate and process the text in a

play12:59

more consistent way and in a way that

play13:00

didn't rely so heavily on consistent

play13:02

formatting between books within the

play13:04

series I changed how the scripts split

play13:06

the text from each case which resolved

play13:07

the multi-case issue that I was having

play13:09

as far as the text was concerned I

play13:11

updated the image naming convention to

play13:13

make it more simple and straightforward

play13:15

and so that it would apply across the

play13:17

board to all the different books in the

play13:18

series I also included New Logic that

play13:21

helps the image extractor script

play13:22

determine when and how to separate

play13:24

pictures when they're presented in a

play13:26

multi-case format by doing all this I've

play13:28

established the trunk of my main script

play13:30

pathway now anytime I work with a new

play13:33

book I don't have to take it all the way

play13:34

to the finished product I just have to

play13:36

modify the data enough that it feeds

play13:38

into this common pathway this will

play13:40

significantly decrease the amount of

play13:41

work that I have to do each time I

play13:43

introduce a new book from the series and

play13:45

finally I packaged all of these

play13:47

different scripts into a simple app

play13:48

which made it so I can process an entire

play13:50

textbook and turn it into flashcards

play13:52

with just a single

play13:57

click

play14:00

he

Rate This

5.0 / 5 (0 votes)

Ähnliche Tags
Medical EducationPython ScriptingFlashcard CreationTextbook ConversionImage ExtractionData OrganizationAnki IntegrationAutomated LearningRadiology CasesEfficiency Tools
Benötigen Sie eine Zusammenfassung auf Englisch?