Skip to content

Results

Every result we measured, in charts

We tested TraceRead in seven studies, S1 to S7. Each chart below shows one result, how many ECGs or photos it comes from, where they came from and which file holds the numbers. Where a result is weak, we say so.

How to read the charts

  • Red is TraceRead's own result.
  • Grey is what it is compared with: a published benchmark, reference ECG programs or the original recordings.
  • Green means a defect was flagged, as it should be.

AUROC is a score from 0.50 to 1.00 for how well a pattern is told apart from the rest. 0.50 is a coin toss. 1.00 is perfect.

A photo made by computer is a photo of a printed page made by TraceRead's own photo simulator (tilt, light, shadow, blur).

The short version

Six results, each with the number of ECGs behind it

Every number here is repeated, with its chart, further down the page.

0 of 69

good frames wrongly flagged by the photo check, while it flagged every frame with a defect it is built to catch

n = 522 frames
Test S6, the photo check

0.908

median match between the rebuilt trace and the original recording, from the photo alone (1.00 is a perfect match)

n = 500 photos made by computer
Test S1, reading the paper

0.902

how well 71 patterns are told apart (AUROC). The published benchmark scores 0.925, so this is below it

n = 2,198 ECGs from Germany
Test S2, finding patterns

20 of 29

patterns scoring 0.90 or more on ECGs from China that TraceRead AI never trained on

n = 45,152 ECGs from China
Test S2, finding patterns

0.009

AUROC lost when TraceRead AI reads photos made by computer instead of the original recordings, across all patterns counted (0.017 across the 5 broad groups)

n = 493 photos made by computer
Test S3, photos against original recordings

7.85 s

to read 95 in 100 ECGs on a 2 vCPU server in AWS Cape Town (median 7.63 s, slowest 27.82 s), with no graphics card

n = 97 photos made by computer
Test S7, speed and cost

What every result on this page has in common

Every photo result comes from photos made by computer of public research ECGs from Germany, China and Brazil. No real phone photo has been scored and no ECG was recorded in Nigeria.

Capture

The photo check caught every defect it was built for and none of 69 good frames

Before a photo is sent, the phone checks it for blur, hand shake, glare, poor light and a page that does not fill the frame. We tested the checks on 522 frames of TraceRead test printouts, some with a defect added on purpose.

Share of frames the photo check flagged, by defect

0%25%50%75%100%Share of frames flagged (percent)Defects it is built to catch: flaggedBlur of 0.5 mm of paperBlur of 0.5 mm of paper: 18 of 1818 of 18Stronger blur, five sizesStronger blur, five sizes: 90 of 9090 of 90Hand shake blur, three sizesHand shake blur, three sizes: 54 of 5454 of 54Blur, then camera noise addedBlur, then camera noise added: 72 of 7272 of 72Hand shake blur, then camera noise addedHand shake blur, then camera noise added: 18 of 1818 of 18Large glare spot, 12% or 20% of the page widthLarge glare spot, 12% or 20% of the page width: 60 of 6060 of 60Washed out, too brightWashed out, too bright: 18 of 1818 of 18Too darkToo dark: 9 of 99 of 9Page too small in the frame (50%, 70% or in acorner)Page too small in the frame (50%, 70% or in a corner): 27 of 2727 of 27Small defects it leaves alone on purpose: not flaggedSlight blur, 0.3 mm of paperSlight blur, 0.3 mm of paper: 0 of 180 of 18Small glare spot, 3% or 5% of the page widthSmall glare spot, 3% or 5% of the page width: 0 of 600 of 60Good frames: not flaggedSharp, well lit pages (no defect)Sharp, well lit pages (no defect): 0 of 330 of 33The same good pages with camera noise addedThe same good pages with camera noise added: 0 of 360 of 36Page filling 95% of the framePage filling 95% of the frame: 0 of 90 of 9
Share of frames the photo check flagged, by defect
RowFrames flaggedFrames tested
Blur of 0.5 mm of paper18 of 1818 frames
Stronger blur, five sizes90 of 9090 frames
Hand shake blur, three sizes54 of 5454 frames
Blur, then camera noise added72 of 7272 frames
Hand shake blur, then camera noise added18 of 1818 frames
Large glare spot, 12% or 20% of the page width60 of 6060 frames
Washed out, too bright18 of 1818 frames
Too dark9 of 99 frames
Page too small in the frame (50%, 70% or in a corner)27 of 2727 frames
Slight blur, 0.3 mm of paper0 of 1818 frames
Small glare spot, 3% or 5% of the page width0 of 6060 frames
Sharp, well lit pages (no defect)0 of 3333 frames
The same good pages with camera noise added0 of 3636 frames
Page filling 95% of the frame0 of 99 frames
n = 522 frames
Data: Frames of TraceRead test printouts, some with a defect added on purpose. Source: spikes/s6-capture/RESULTS.md, section 2 Self test.

0 of 69

good frames flagged (33 sharp pages, 36 with camera noise added)

n = 69 frames
Test S6

366 of 366

frames with a defect it is built to catch were flagged

n = 366 frames
Test S6

Where this is weak

Blur of 0.3 mm of paper (18 frames) is below the width of the trace line, which is where the blur check starts. Small glare spots of 3% or 5% of the page width (60 frames) were left alone on purpose. Neither was flagged.

The checks were tested on pictures and in a browser with a fake camera. No real phone camera was measured.

Reading the paper

From a photo alone, the rebuilt trace matches the original recording at a median of 0.908

TraceRead finds the page, works out the layout and follows the ink of each of the 12 leads. We compared its rebuilt traces with the original recordings on 500 photos made by computer of test ECGs from Germany (PTB-XL).

Median match between the rebuilt trace and the original recording

0no match0.250.500.751.00perfectMedian match over 6,000 lead rows (0 to 1)Photo alone: TraceRead finds the page, layout androwsPhoto alone: TraceRead finds the page, layout and rows: 0.9080.908Photo alone, timing shift of up to 0.1 secondallowedPhoto alone, timing shift of up to 0.1 second allowed: 0.9620.962True page position givenTrue page position given: 0.9800.980
Median match between the rebuilt trace and the original recording
RowMedian match
Photo alone: TraceRead finds the page, layout and rows0.908
Photo alone, timing shift of up to 0.1 second allowed0.962
True page position given0.980
n = 500 photos made by computer
Data: Photos made by computer of PTB-XL test ECGs (fold 10), 6,000 lead rows. Source: spikes/s1-digitisation/RESULTS.md, part 2 section 3 Results against the targets.

0.908

median match from the photo alone

n = 500 photos made by computer
Test S1

0.980

the same match when the true page position is given

n = 500 photos made by computer
Test S1

Where this is weak

The drop from 0.980 to 0.908 is mostly in where the rows sit in time. Allowing a timing shift of up to 0.1 second brings the match to 0.962, so the shape of the trace is close and its position can be a few milliseconds off.

What TraceRead found right in the photo

0%25%50%75%100%Share of photos (percent)Page layout read rightPage layout read right: 99.0%99.0%Long rhythm strips read rightLong rhythm strips read right: 99.0%99.0%Paper size read right (A4 or US Letter)Paper size read right (A4 or US Letter): 97.6%97.6%Page found in the photoPage found in the photo: 98.6%98.6%
What TraceRead found right in the photo
RowShare of photos (percent)Photos
Page layout read right99.0%
Long rhythm strips read right99.0%
Paper size read right (A4 or US Letter)97.6%
Page found in the photo98.6%493 of 500
n = 500 photos made by computer
Data: Photos made by computer of PTB-XL test ECGs (fold 10), 6,000 lead rows. Source: spikes/s1-digitisation/RESULTS.md, part 2 section 3 Results against the targets.

7 of 500

pages not found, so no first read was given (1.4%)

n = 500 photos made by computer
Test S1

Where this is weak

Five of the 7 pages not found were cropped: their corners were outside the frame. TraceRead gives no first read for a page it cannot find and asks for a new photo. TraceRead knows only the page layouts it was built for, so a machine with a different page design needs a new template.

Median match for each of the 12 leads

The red dot is the median from the photo alone. The line behind it runs from the lower to the upper quarter of the 500 photos.

Photo aloneTrue page position given0.500.600.700.800.901.00perfectMedian match (0.50 to 1.00)Lead I: 0.938 / 0.980Lead I0.938 / 0.980Lead II: 0.912 / 0.985Lead II0.912 / 0.985Lead III: 0.920 / 0.974Lead III0.920 / 0.974Lead aVR: 0.900 / 0.978Lead aVR0.900 / 0.978Lead aVL: 0.903 / 0.969Lead aVL0.903 / 0.969Lead aVF: 0.900 / 0.975Lead aVF0.900 / 0.975Lead V1: 0.930 / 0.988Lead V10.930 / 0.988Lead V2: 0.900 / 0.981Lead V20.900 / 0.981Lead V3: 0.823 / 0.962Lead V30.823 / 0.962Lead V4: 0.860 / 0.965Lead V40.860 / 0.965Lead V5: 0.893 / 0.981Lead V50.893 / 0.981Lead V6: 0.936 / 0.991Lead V60.936 / 0.991
Median match for each of the 12 leads
LeadPhoto alone, medianLower quarterUpper quarterTrue page position, median
I0.9380.8270.9750.980
II0.9120.7790.9620.985
III0.9200.8030.9690.974
aVR0.9000.7570.9590.978
aVL0.9030.7400.9570.969
aVF0.9000.7460.9580.975
V10.9300.7860.9740.988
V20.9000.6720.9620.981
V30.8230.6000.9440.962
V40.8600.5850.9670.965
V50.8930.6480.9720.981
V60.9360.7790.9790.991
n = 500 photos made by computer
Data: Photos made by computer of PTB-XL test ECGs (fold 10), 6,000 lead rows. Source: spikes/s1-digitisation/RESULTS.md, part 2 section 3 Per lead medians; eval/levelC_test_per_lead.csv and levelA_test_per_lead.csv.

9 of 12

leads reach a median match of 0.90 from the photo alone

n = 500 photos made by computer
Test S1

Where this is weak

V3 (0.823) and V4 (0.860) are the weakest leads at every step, where the heart signal is tallest and rows cross. The grey dots show what the same leads reach when the page position is given.

Median match by page layout

0no match0.250.500.751.00perfectMedian match (0 to 1)3x4 with one long stripn = 250 photos3x4 with one long strip, Photo alone: 0.921Photo alone0.9213x4 with one long strip, True page position given: 0.983True page position given0.9833x4 with three long stripsn = 75 photos3x4 with three long strips, Photo alone: 0.9160.9163x4 with three long strips, True page position given: 0.9810.9816x2n = 100 photos6x2, Photo alone: 0.9170.9176x2, True page position given: 0.9820.98212x1, one lead per rown = 75 photos12x1, one lead per row, Photo alone: 0.7760.77612x1, one lead per row, True page position given: 0.9220.922
Median match by page layout
RowPhoto aloneTrue page position given
3x4 with one long strip0.9210.983
3x4 with three long strips0.9160.981
6x20.9170.982
12x1, one lead per row0.7760.922
n = 500 photos made by computer
Data: Photos made by computer of PTB-XL test ECGs (fold 10), 6,000 lead rows. Source: spikes/s1-digitisation/RESULTS.md, part 2 section 3 Per layout medians; eval/levelC_test_per_layout.csv and levelA_test_per_layout.csv.

Where this is weak

The 12x1 layout is the weak spot: 0.776 from the photo alone. Its rows are only 15 mm apart, so tall beats cross the rows next to them and the trace follower sometimes follows the wrong one.

The 12 case study photos, one row each

Each row opens that case study. The filled dot is the median match as read. The hollow dot is the match when a timing shift of up to 0.1 second is allowed.

As readLined up (shift of up to 0.1 second)0no match0.250.500.751.00perfectMedian match over the 12 leads (0 to 1)T-0010: Anterior infarct pattern: 0.880 / 0.983T-0010: Anterior infarct pattern0.880 / 0.983T-0018: Incomplete right bundle branch block and 1 more: 0.936 / 0.982T-0018: Incomplete right bundle branch block and 1more0.936 / 0.982T-0025: Normal ECG and 1 more: 0.801 / 0.836T-0025: Normal ECG and 1 more0.801 / 0.836T-0045: Complete right bundle branch block and 1 more: 0.993 / 0.994T-0045: Complete right bundle branch block and 1more0.993 / 0.994T-0046: Unspecific wide QRS and 1 more: 0.778 / 0.983T-0046: Unspecific wide QRS and 1 more0.778 / 0.983T-0048: Reduced blood flow pattern, bottom and 2 more: 0.766 / 0.982T-0048: Reduced blood flow pattern, bottom and 2more0.766 / 0.982T-0053: Normal ECG: -0.004 / 0.794T-0053: Normal ECGRead wrongly-0.004 / 0.794T-0056: Minor T wave abnormalities: 0.877 / 0.988T-0056: Minor T wave abnormalities0.877 / 0.988T-0057: Unspecific reduced blood flow pattern and 1 more: 0.965 / 0.975T-0057: Unspecific reduced blood flow pattern and1 more0.965 / 0.975T-0058: Inferior infarct pattern: 0.900 / 0.982T-0058: Inferior infarct pattern0.900 / 0.982T-0059: Normal ECG: 0.015 / 0.139T-0059: Normal ECGRead wrongly0.015 / 0.139T-0064: Normal ECG and 1 more: 0.910 / 0.976T-0064: Normal ECG and 1 more0.910 / 0.976
The 12 case study photos, one row each
Case studyAs readLined upRead wrongly
T-0010: Anterior infarct pattern0.8800.983No
T-0018: Incomplete right bundle branch block and 1 more0.9360.982No
T-0025: Normal ECG and 1 more0.8010.836No
T-0045: Complete right bundle branch block and 1 more0.9930.994No
T-0046: Unspecific wide QRS and 1 more0.7780.983No
T-0048: Reduced blood flow pattern, bottom and 2 more0.7660.982No
T-0053: Normal ECG-0.0040.794Yes
T-0056: Minor T wave abnormalities0.8770.988No
T-0057: Unspecific reduced blood flow pattern and 1 more0.9650.975No
T-0058: Inferior infarct pattern0.9000.982No
T-0059: Normal ECG0.0150.139Yes
T-0064: Normal ECG and 1 more0.9100.976No
n = 12 photos made by computer
Data: 12 adult pages of the TraceRead print kit (PTB-XL test ECGs), one photo made by computer each, chosen by a seeded draw. Source: apps/web/src/content/runs/index.json (the 12 case study runs).

0.879 / 0.982

median over the 12 photos, as read and lined up

n = 12 photos made by computer
The 12 case study runs

The two read wrongly

T-0053 (minus 0.004 as read, 0.794 lined up) and T-0059 (0.015 as read, 0.139 lined up) were read wrongly, and neither was held for retake. For T-0059, none of the 12 calibration pulses was read, yet the checks did not fire.

The 12 were drawn with a fixed seed, 3 from each of 4 groups of the dataset's own statements, so they do not stand for the dataset as a whole. 10 of the 12 carry the paper speed warning.

Finding patterns

TraceRead AI is level with the published scores on 2 of 6 pattern tasks and below them on 4

We scored TraceRead AI on test ECGs from Germany that it never trained on, one task at a time, the way a published benchmark does. Each task counts a different number of patterns. A score of 0.50 is a coin toss and 1.00 is perfect.

AUROC by pattern task, against the published benchmark

0.50coin toss0.600.700.800.901.00perfectAUROC. The thin line is the 95% range for TraceRead AI.5 broad groupsn = 2,158 ECGs5 broad groups, TraceRead AI: 0.931TraceRead AI0.9315 broad groups, Published benchmark: 0.928Published benchmark0.92812 rhythm patternsn = 2,098 ECGs12 rhythm patterns, TraceRead AI: 0.9550.95512 rhythm patterns, Published benchmark: 0.9570.95719 wave shape patternsn = 880 ECGs19 wave shape patterns, TraceRead AI: 0.8670.86719 wave shape patterns, Published benchmark: 0.8960.89623 finer groupsn = 2,158 ECGs23 finer groups, TraceRead AI: 0.9110.91123 finer groups, Published benchmark: 0.9290.92944 main heart patternsn = 2,158 ECGs44 main heart patterns, TraceRead AI: 0.9020.90244 main heart patterns, Published benchmark: 0.9370.937All 71 patternsn = 2,198 ECGsAll 71 patterns, TraceRead AI: 0.9020.902All 71 patterns, Published benchmark: 0.9250.925
AUROC by pattern task, against the published benchmark
RowTraceRead AIPublished benchmark
5 broad groups0.9310.928
12 rhythm patterns0.9550.957
19 wave shape patterns0.8670.896
23 finer groups0.9110.929
44 main heart patterns0.9020.937
All 71 patterns0.9020.925
n = 2,198 ECGs in the test fold (fewer for tasks with rarer patterns)
Data: PTB-XL test ECGs (fold 10), original recordings; patterns scored as the published benchmark scores them. Source: spikes/s2-classifier-baseline/RESULTS.md, section 3 Benchmark tasks, fold 10; results/benchmark_fold10.csv.

0.931

for the 5 broad groups, against 0.928 published

n = 2,158 ECGs from Germany
Test S2

0.902

for all 71 patterns, against 0.925 published

n = 2,198 ECGs from Germany
Test S2

Where this is weak

Rhythm is 0.002 under the published score, with the published value well inside our range: a tie at this resolution. The four wider tasks are below it, by 0.018 to 0.035.

We trained for 8 to 20 rounds where the benchmark protocol asks for 50, and could not test a longer schedule, so we cannot say how much of the gap is training time. 22 of the 71 patterns have fewer than 10 examples in the test ECGs and their scores are very uncertain.

AUROC for 29 patterns on ECGs from China

Chapman Shaoxing Ningbo ECGs, which TraceRead AI never trained on, sorted from best to worst. The line marks 0.90.

Label matches the patternLabel matches in part0.50coin toss0.600.700.800.901.00perfectAUROC. The thin line is the 95% range.0.90Complete left bundle branch block: 0.998Complete left bundle branch block0.998Complete right bundle branch block: 0.994Complete right bundle branch block0.994Sinus tachycardia: 0.992Sinus tachycardia0.992Right bundle branch block, complete or not stated: 0.992Right bundle branch block, complete or not stated0.992Atrial fibrillation or flutter: 0.985Atrial fibrillation or flutter0.985Left anterior fascicular block: 0.984Left anterior fascicular block0.984Supraventricular tachycardia: 0.981Supraventricular tachycardia0.981Ventricular premature beats: 0.971Ventricular premature beats0.971Left ventricular hypertrophy: 0.963Left ventricular hypertrophy0.963Left bundle branch block, complete or not stated: 0.960Left bundle branch block, complete or not stated0.960Incomplete right bundle branch block: 0.939Incomplete right bundle branch block0.939Right ventricular hypertrophy: 0.936Right ventricular hypertrophy0.936Sinus bradycardia: 0.931Sinus bradycardia0.931Paced rhythm: 0.926Paced rhythm0.926First degree AV block: 0.925First degree AV block0.925Right atrial hypertrophy: 0.923Right atrial hypertrophy0.923Sinus arrhythmia: 0.923Sinus arrhythmia0.923Sinus rhythm: 0.912Sinus rhythm0.912Myocardial infarction pattern: 0.909Myocardial infarction pattern0.909Third degree AV block: 0.905Third degree AV block0.905Wolff Parkinson White pattern: 0.893Wolff Parkinson White pattern0.893Atrial premature beats: 0.881Atrial premature beats0.881Prolonged PR interval: 0.877Prolonged PR interval0.877T wave inversion: 0.876T wave inversion0.876ST depression: 0.826ST depression0.826Second degree AV block: 0.822Second degree AV block0.822Low QRS voltage: 0.807Low QRS voltage0.807Long QT interval: 0.735Long QT interval0.735Unspecific wide QRS: 0.689Unspecific wide QRS0.689
AUROC for 29 patterns on ECGs from China
PatternAUROCLow end of the rangeHigh end of the rangeECGs with the patternLabel match
Complete left bundle branch block0.9980.9970.999213Matches
Complete right bundle branch block0.9940.9920.9951,096Matches
Sinus tachycardia0.9920.9910.9937,255Matches
Right bundle branch block, complete or not stated0.9920.9900.9931,745Matches in part
Atrial fibrillation or flutter0.9850.9840.9869,840Matches
Left anterior fascicular block0.9840.9810.987380Matches
Supraventricular tachycardia0.9810.9780.984724Matches in part
Ventricular premature beats0.9710.9670.9741,385Matches
Left ventricular hypertrophy0.9630.9580.968647Matches
Left bundle branch block, complete or not stated0.9600.9510.969453Matches in part
Incomplete right bundle branch block0.9390.9290.948246Matches
Right ventricular hypertrophy0.9360.9220.948110Matches
Sinus bradycardia0.9310.9280.93316,559Matches
Paced rhythm0.9260.9160.9361,182Matches
First degree AV block0.9250.9190.9311,140Matches
Right atrial hypertrophy0.9230.8700.96636Matches in part
Sinus arrhythmia0.9230.9170.9282,550Matches in part
Sinus rhythm0.9120.9080.9168,125Matches
Myocardial infarction pattern0.9090.8790.933123Matches in part
Third degree AV block0.9050.8660.94176Matches
Wolff Parkinson White pattern0.8930.8590.92472Matches
Atrial premature beats0.8810.8720.8891,321Matches
Prolonged PR interval0.8770.8420.90752Matches
T wave inversion0.8760.8710.8812,877Matches in part
ST depression0.8260.8170.8341,668Matches in part
Second degree AV block0.8220.7860.85397Matches
Low QRS voltage0.8070.7940.8201,043Matches in part
Long QT interval0.7350.7140.756394Matches
Unspecific wide QRS0.6890.6720.704771Matches in part
n = 45,152 ECGs from China
Data: Chapman Shaoxing Ningbo ECGs (China), never used to train TraceRead AI; 3x4 printout with a lead II strip. Source: spikes/s2-classifier-baseline/RESULTS.md, section 3 External test on Chapman; results/chapman_auroc_per_label.csv.

20 of 29

patterns at 0.90 or more on ECGs from China

n = 45,152 ECGs from China
Test S2

Where this is weak

Nine fall below 0.90. The weakest are unspecific wide QRS (0.689) and long QT (0.735). The patterns have between 36 and 16,559 ECGs each, so the ranges for rare patterns are wide.

AUROC measures ranking, not whether a fixed threshold would work in a new hospital. No threshold was chosen on these ECGs.

What a 3x4 printout costs, against 12 full leads

The same TraceRead AI shown the same ECGs as 12 full leads of 10 seconds, or as the common 3x4 printout with a lead II strip.

0.50coin toss0.600.700.800.901.00perfectAUROC5 broad groupsn = 2,158 ECGs5 broad groups, 12 full leads: 0.91612 full leads0.9165 broad groups, 3x4 printout: 0.9193x4 printout0.91912 rhythm patternsn = 2,098 ECGs12 rhythm patterns, 12 full leads: 0.9670.96712 rhythm patterns, 3x4 printout: 0.9690.969All 71 patternsn = 2,198 ECGsAll 71 patterns, 12 full leads: 0.9020.902All 71 patterns, 3x4 printout: 0.9100.910
What a 3x4 printout costs, against 12 full leads
Row12 full leads3x4 printout
5 broad groups0.9160.919
12 rhythm patterns0.9670.969
All 71 patterns0.9020.910
n = 2,198 ECGs in the test fold
Data: PTB-XL test ECGs (fold 10), original recordings shown to TraceRead AI as 12 full leads or as a 3x4 printout with a lead II strip. Source: spikes/s2-classifier-baseline/RESULTS.md, section 3 One model, four printout layouts; results/traceread_layouts_fold10.csv and layout_cost_fold10.csv.

+0.0075

AUROC for the 3x4 printout minus 12 full leads, all 71 patterns (range +0.0044 to +0.0108)

n = 2,198 ECGs from Germany
Test S2

Where this is weak

A 3x4 printout cost nothing we could measure. The layout that shows the least scored a little better, and the difference sits in the rare patterns. We did not find out why. These are original recordings cut to the printout layout, not photos.

Photos against original recordings

Reading a photo costs 0.009 AUROC across all patterns and 0.017 across the 5 broad groups

We scored the same test ECGs two ways: as original recordings and as rebuilt traces from photos made by computer. The gap is what the photo costs. Fine tuning TraceRead AI on rebuilt traces narrowed the gap and cost nothing on original recordings.

AUROC on original recordings and on photos

0.50coin toss0.600.700.800.901.00perfectAUROCAll patterns, 25 countedn = 493 photosAll patterns, 25 counted, Original recordings: 0.927Original recordings0.927All patterns, 25 counted, Photos, before fine tuning: 0.915Photos, before fine tuning0.915All patterns, 25 counted, Photos, after fine tuning: 0.919Photos, after fine tuning0.9195 broad groupsn = 485 photos5 broad groups, Original recordings: 0.9130.9135 broad groups, Photos, before fine tuning: 0.8870.8875 broad groups, Photos, after fine tuning: 0.8970.897
AUROC on original recordings and on photos
RowOriginal recordingsPhotos, before fine tuningPhotos, after fine tuning
All patterns, 25 counted0.9270.9150.919
5 broad groups0.9130.8870.897
n = 493 usable photos made by computer (485 for the 5 broad groups)
Data: Photos made by computer of PTB-XL test ECGs (fold 10), the same ECGs scored as original recordings and as rebuilt traces. Source: spikes/s3-clean-vs-digitised/RESULTS.md, sections 3.1 and 3.3; results/gap_baseline_test_main.csv and gap_finetuned_test_main.csv.

Reading this chart

For the 5 broad groups, the fine tuned TraceRead AI scores 0.915 on the original recordings (0.913 before). Each gap on the next chart is taken against the original recordings read by the same TraceRead AI. Fine tuning changed the original recordings by 0.000 (all patterns) and 0.001 (5 broad groups).

The AUROC lost to the photo, before and after fine tuning

0.000.010.020.030.040.05AUROC lost: original recordings minus photos. The thin line is the 95% range.All patterns, 25 countedn = 493 photosAll patterns, 25 counted, Before fine tuning: 0.0120.012Before fine tuningAll patterns, 25 counted, After fine tuning: 0.0090.009After fine tuning5 broad groupsn = 485 photos5 broad groups, Before fine tuning: 0.0270.0275 broad groups, After fine tuning: 0.0170.017
The AUROC lost to the photo, before and after fine tuning
RowBefore fine tuningAfter fine tuning
All patterns, 25 counted0.0120.009
5 broad groups0.0270.017
n = 493 usable photos made by computer (485 for the 5 broad groups)
Data: Photos made by computer of PTB-XL test ECGs (fold 10), the same ECGs scored as original recordings and as rebuilt traces. Source: spikes/s3-clean-vs-digitised/RESULTS.md, sections 3.1 and 3.3; results/gap_baseline_test_main.csv and gap_finetuned_test_main.csv.

0.009

AUROC lost to the photo after fine tuning, all patterns counted (0.012 before)

n = 493 photos made by computer
Test S3

0.017

AUROC lost to the photo after fine tuning, 5 broad groups (0.027 before)

n = 485 photos made by computer
Test S3

Where this is weak

Fine tuning closed about a third of the gap and did not close it: for the 5 broad groups the range after (0.007 to 0.028) is still clear of zero. Doubling the fine tuning photos from 1,957 to 3,916 changed nothing.

Share of photos held for retake, by page layout

0%3%6%9%12%Share of usable photos held for retake (percent)3x4 with one long strip3x4 with one long strip: 4.8% (12 of 248)4.8% (12 of 248)3x4 with three long strips3x4 with three long strips: 4.2% (3 of 72)4.2% (3 of 72)6x26x2: 10.1% (10 of 99)10.1% (10 of 99)12x1, one lead per row12x1, one lead per row: 5.4% (4 of 74)5.4% (4 of 74)All layoutsAll layouts: 5.9% (29 of 493)5.9% (29 of 493)
Share of photos held for retake, by page layout
RowShare held (percent)Usable photosPhotos held
3x4 with one long strip4.8% (12 of 248)24812
3x4 with three long strips4.2% (3 of 72)723
6x210.1% (10 of 99)9910
12x1, one lead per row5.4% (4 of 74)744
All layouts5.9% (29 of 493)49329
n = 493 usable photos made by computer
Data: Photos made by computer of PTB-XL test ECGs (fold 10); thresholds set on the validation photos and applied unchanged. Source: spikes/s3-clean-vs-digitised/RESULTS.md, section 3.4 Abstaining; results/abstain_finetuned_test.csv.

5.9%

of usable photos held for retake (29 of 493)

n = 493 usable photos made by computer
Test S3

Where this is weak

On the photos kept, the gap to the original recordings fell from 0.017 to 0.010 (5 broad groups) and from 0.009 to 0.006 (all patterns). 6x2 pages are held most often, 10.1%.

7 of 500 photos (1.4%) could not be read at all, on top of the 5.9%. A rule set to hold 6% on the validation photos held 5.9% on the test photos, but a rule set for 10% held 13.8%, so the share has to be checked on every new set of photos.

AUROC lost to the photo, by how many leads lost their peaks

A lead counts as cut when the rebuilt trace keeps under 0.8 of the true upward height of the beats. The 5 broad groups.

0.000.040.080.12AUROC lost: original recordings minus photos0 or 1 lead cutn = 350 photos0 or 1 lead cut: 0.018 (0.007 to 0.029)0.018 (0.007 to 0.029)2 or 3 leads cutn = 87 photos2 or 3 leads cut: 0.009 (-0.011 to 0.030)0.009 (-0.011 to 0.030)4 or more leads cutn = 56 photos4 or more leads cut: 0.072 (0.025 to 0.126)0.072 (0.025 to 0.126)
AUROC lost to the photo, by how many leads lost their peaks
RowAUROC lostLow end of the rangeHigh end of the rangePhotos
0 or 1 lead cut0.018 (0.007 to 0.029)0.0070.029350
2 or 3 leads cut0.009 (-0.011 to 0.030)-0.0110.0387
4 or more leads cut0.072 (0.025 to 0.126)0.0250.12656
n = 493 usable photos made by computer
Data: Photos made by computer of PTB-XL test ECGs (fold 10); a lead is cut when it keeps under 0.8 of the true upward height. Source: spikes/s3-clean-vs-digitised/RESULTS.md, section 3.1 One cause: the digitiser cuts tall R waves; results/gap_by_cut_leads_baseline_test.csv.

0.072

AUROC lost on photos with 4 or more leads cut, 4 times the loss with 0 or 1 cut

n = 56 photos made by computer
Test S3

Where this is weak

About one lead in ten (9.8%) loses more than a fifth of the height of its beats when the trace is rebuilt, and 56 of 493 photos (11%) have 4 or more such leads. This is the largest single cause of the gap. The middle group, 2 or 3 leads cut, shows no clear difference.

Measuring

Heart rate and QRS width match the reference programs about as well as the programs match each other

We measured heart rate, PR, QRS, QT and QTc on 2,198 test ECGs from Germany and compared each with the values of reference ECG programs. The grey bar is how far apart the two reference programs are from each other, a rough floor for any measurement.

Average error in heart rate

0.000.250.500.751.00Average error, beats a minute. The thin line is the 95% range.Heart rate (beats a minute)Heart rate (beats a minute), TraceRead AI: 0.6TraceRead AI0.6Heart rate (beats a minute), Between the two programs: 0.50.5Between the two programs
Average error in heart rate
RowTraceRead AIBetween the two programs
Heart rate (beats a minute)0.60.5
n = 2,198 ECGs
Data: PTB-XL test ECGs (fold 10), 12 full leads, against the reference ECG programs' values published with PTB-XL+. Source: spikes/s4-measurements/RESULTS.md, sections 3.3, 3.7 and 3.8.

0.6

beats a minute average heart rate error (0.5 between the two reference programs)

n = 2,198 ECGs from Germany
Test S4

Average error in the intervals, in milliseconds

05101520Average error, milliseconds. The thin line is the 95% range.PR intervalPR interval, TraceRead AI: 12.6 msTraceRead AI12.6 msPR interval, Between the two programs: 8.1 ms8.1 msBetween the two programsQRS widthQRS width, TraceRead AI: 5.6 ms5.6 msQRS width, Between the two programs: 5.2 ms5.2 msQT intervalQT interval, TraceRead AI: 17.2 ms17.2 msQT interval, Between the two programs: 9.1 ms9.1 msQTc, Bazett formulaQTc, Bazett formula, TraceRead AI: 16.8 ms16.8 msQTc, Bazett formula, Between the two programs: 10.4 ms10.4 msQTc, Fridericia formulaQTc, Fridericia formula, TraceRead AI: 16.0 ms16.0 msQTc, Fridericia formula, Between the two programs: 9.9 ms9.9 ms
Average error in the intervals, in milliseconds
RowTraceRead AIBetween the two programs
PR interval12.6 ms8.1 ms
QRS width5.6 ms5.2 ms
QT interval17.2 ms9.1 ms
QTc, Bazett formula16.8 ms10.4 ms
QTc, Fridericia formula16.0 ms9.9 ms
n = 2,198 ECGs
Data: PTB-XL test ECGs (fold 10), 12 full leads, against the reference ECG programs' values published with PTB-XL+. Source: spikes/s4-measurements/RESULTS.md, sections 3.3, 3.7 and 3.8.

5.6 ms

average QRS width error (5.2 ms between the two reference programs)

n = 2,198 ECGs from Germany
Test S4

16.8 ms

average QTc error by the Bazett formula (10.4 ms between the two reference programs)

n = 2,198 ECGs from Germany
Test S4

Where this is weak

PR, QT and QTc are 4.5 to 8.1 ms further from the reference programs than the programs are from each other. The 95% range for QTc by Bazett reaches 17.7 ms. The error is concentrated in a few groups: wide QRS, pacing, atrial fibrillation and fast heart rates, which still have QTc errors of 30 to 50 ms.

PR is scored on the ECGs where the reference program found a P wave. These are 12 full leads; on 3x4 and 6x2 printouts the QTc error by the Bazett formula is 18.0 to 19.2 ms.

The same intervals measured from photos made by computer

Average error against the reference programs, on the original recordings and on the rebuilt traces of the same ECGs.

0102030Average error, millisecondsPR intervaln = 444 photosPR interval, Original recordings: 12.3 ms12.3 msOriginal recordingsPR interval, Photos: 13.2 msPhotos13.2 msQT intervaln = 492 photosQT interval, Original recordings: 16.8 ms16.8 msQT interval, Photos: 18.2 ms18.2 msQTc, Bazett formulan = 491 photosQTc, Bazett formula, Original recordings: 19.9 ms19.9 msQTc, Bazett formula, Photos: 24.0 ms24.0 msQTc, Fridericia formulan = 491 photosQTc, Fridericia formula, Original recordings: 18.6 ms18.6 msQTc, Fridericia formula, Photos: 21.4 ms21.4 ms
The same intervals measured from photos made by computer
RowOriginal recordingsPhotos
PR interval12.3 ms13.2 ms
QT interval16.8 ms18.2 ms
QTc, Bazett formula19.9 ms24.0 ms
QTc, Fridericia formula18.6 ms21.4 ms
n = 492 usable photos made by computer
Data: Photos made by computer of PTB-XL test ECGs (fold 10), against the reference ECG programs' values published with PTB-XL+. Source: spikes/s3-clean-vs-digitised/RESULTS.md, section 3.2 Measurements on digitised signals.

2.6

beats a minute average heart rate error on photos (1.0 on the original recordings)

n = 492 photos made by computer
Test S3

Where this is weak

Heart rate gets worse almost entirely on 3x4 pages, where the beat counter misses beats on a long strip that lost its tall peaks. QTc by Bazett rises from 19.9 to 24.0 ms and by Fridericia from 18.6 to 21.4 ms.

Speed and cost

A median ECG takes 7.63 seconds to read, and its compute costs 0.239 US dollars per 1,000 AI first reads

We ran the whole path from photo to AI first read on servers in AWS Cape Town, with no graphics card, on photos made by computer. A vCPU is one slice of a server processor.

Seconds to read one ECG

051015202530Seconds from photo to AI first readMedian ECGMedian ECG, 2 vCPU server: 7.63 s7.63 s2 vCPU serverMedian ECG, 4 vCPU server: 4.47 s4.47 s4 vCPU server95th percentile (19 of 20 ECGs faster)95th percentile (19 of 20 ECGs faster), 2 vCPU server: 7.85 s7.85 s2 vCPU server95th percentile (19 of 20 ECGs faster), 4 vCPU server: 4.75 s4.75 s4 vCPU server99th percentile99th percentile, 2 vCPU server: 26.85 s2 vCPU server26.85 s99th percentile, 4 vCPU server: 15.07 s4 vCPU server15.07 sSlowest ECGSlowest ECG, 2 vCPU server: 27.82 s2 vCPU server27.82 sSlowest ECG, 4 vCPU server: 15.51 s4 vCPU server15.51 s
Seconds to read one ECG
Row2 vCPU server4 vCPU server
Median ECG7.63 s4.47 s
95th percentile (19 of 20 ECGs faster)7.85 s4.75 s
99th percentile26.85 s15.07 s
Slowest ECG27.82 s15.51 s
n = 97 photos made by computer (97 on the 2 vCPU server, 100 on the 4 vCPU server)
Data: Photos made by computer of ECGs; whole path from photo to AI first read on AWS servers in Cape Town, no graphics card. Source: spikes/s7-inference/RESULTS.md, section 3.7 The rerun with S1's real digitiser.

7.85 s

to read 95 in 100 ECGs on a 2 vCPU, 4 GB server (4.75 s on 4 vCPU)

n = 97 photos made by computer
Test S7

Where this is weak

The 95th percentile hides a tail. 3 of 97 ECGs on the 2 vCPU server took 14.0, 26.8 and 27.8 seconds, two to four times the median, because the page had to be turned and read again. The slowest was 27.82 seconds.

Cost of 1,000 AI first reads, in US dollars

010203040506070US dollars per 1,000 AI first readsCompute only, 2 vCPU serverCompute only, 2 vCPU server: $0.239$0.239Compute only, 4 vCPU serverCompute only, 4 vCPU server: $0.286$0.286Always on 2 vCPU server, at 3,000 a monthAlways on 2 vCPU server, at 3,000 a month: $31.14$31.14Always on 4 vCPU server, at 3,000 a monthAlways on 4 vCPU server, at 3,000 a month: $62.28$62.28
Cost of 1,000 AI first reads, in US dollars
RowUS dollars per 1,000 AI first reads
Compute only, 2 vCPU server$0.239
Compute only, 4 vCPU server$0.286
Always on 2 vCPU server, at 3,000 a month$31.14
Always on 4 vCPU server, at 3,000 a month$62.28
n = 97 photos made by computer
Data: Compute cost from the measured busy seconds per ECG and AWS prices in Cape Town; always on worker priced at 3,000 AI first reads a month (an assumed volume). Source: spikes/s7-inference/RESULTS.md, sections 3.3 and 3.7.

$0.239

compute cost per 1,000 AI first reads on the 2 vCPU server

n = 97 photos made by computer
Test S7

Where this is weak

The always on server is the bill, not the compute. A 2 vCPU server costs $93.42 a month, which is $31.14 per 1,000 at 3,000 a month, because it is busy under 1% of the time. The 3,000 a month is an assumed volume, not a measured one.

Round trip time from one computer in Nigeria to AWS regions

The bar is the median. The thin line runs to the 90th percentile: 9 in 10 requests were faster.

0100200300400Milliseconds for about one network round tripCape TownCape Town: 109 ms109 msLondonLondon: 144 ms144 msMilanMilan: 154 ms154 msIrelandIreland: 193 ms193 msFrankfurtFrankfurt: 197 ms197 msUAEUAE: 257 ms257 msN. VirginiaN. Virginia: 276 ms276 msMumbaiMumbai: 359 ms359 ms
Round trip time from one computer in Nigeria to AWS regions
RowMedian (ms)Low end of the rangeHigh end of the range90th percentile (ms)
Cape Town109 ms109184184
London144 ms144207207
Milan154 ms154205205
Ireland193 ms193235235
Frankfurt197 ms197237237
UAE257 ms257303303
N. Virginia276 ms276360360
Mumbai359 ms359410410
n = 30 requests to each place
Data: One Mac on a fixed line in Abuja, 30 requests to each AWS region (about one network round trip, in milliseconds). Source: spikes/s5-aws-region/RESULTS.md, section 3.3 Latency from the Mac in Abuja.

109 ms

median round trip to Cape Town, the nearest of nine regions (184 ms at the 90th percentile)

n = 30 requests
Test S5

Where this is weak

Bahrain did not answer in any of 30 requests. A request through CloudFront's Lagos edge took 48 ms at the median (105 ms at the 90th percentile). These come from one Mac on a fixed line. Phones on mobile networks were not measured.

Limits we measured

Where TraceRead falls short, as measured

Each of these is a measured result, shown with the number of ECGs it comes from. They are facts about what was measured, so read them before relying on any other number on this page.

How well TraceRead AI told ST elevation apart on ECGs from China

ST elevation is a sign of a heart attack. This is the nearest thing TraceRead AI learned to it.

0.50coin toss0.600.700.800.901.00perfectAUROC. The thin line is the 95% range.ECGs from China, 12 full leadsECGs from China, 12 full leads: 0.6050.605ECGs from China, 3x4 printoutECGs from China, 3x4 printout: 0.6230.623ECGs from China, read in 2.5 second windowsECGs from China, read in 2.5 second windows: 0.6300.630Inside PTB-XL (the same pattern)Inside PTB-XL (the same pattern): 0.9090.909
How well TraceRead AI told ST elevation apart on ECGs from China
RowAUROCLow end of the rangeHigh end of the range
ECGs from China, 12 full leads0.6050.5620.646
ECGs from China, 3x4 printout0.6230.5840.665
ECGs from China, read in 2.5 second windows0.6300.590.669
Inside PTB-XL (the same pattern)0.909
n = 176 Chapman ECGs labelled ST elevation
Data: Chapman Shaoxing Ningbo ECGs (China); the nearest thing TraceRead AI learned to ST elevation, scored against Chapman's ST elevation label. Source: spikes/s2-classifier-baseline/RESULTS.md, section 3 External test on Chapman and ST elevation.

0.61 to 0.63

AUROC for ST elevation on ECGs from China, where 0.50 is a coin toss

n = 176 ECGs from China
Test S2

Where this is weak

The same pattern scored 0.909 inside PTB-XL, so it is learnable there but does not carry over to ST elevation in China. We make no claim that TraceRead AI finds ST elevation.

Share of ST elevation ECGs a fixed measuring rule found

A rule that measures the ST segment with fixed code, run once on ECGs from China. The second line of each row is the share of other ECGs it also flagged.

0%25%50%75%100%Share of ST elevation ECGs found (percent). The thin line is the 95% range.At the definition thresholds12 full leadsalso flags 5.3% of other ECGs12 full leads: 61.9%61.9%3x4 printoutalso flags 6.2% of other ECGs3x4 printout: 50.0%50.0%Photo made by computer of a 3x4 printoutalso flags 6.2% of other ECGsPhoto made by computer of a 3x4 printout: 50.9%50.9%At a more sensitive setting12 full leadsalso flags 22.0% of other ECGs12 full leads: 89.8%89.8%3x4 printoutalso flags 30.2% of other ECGs3x4 printout: 81.2%81.2%Photo made by computer of a 3x4 printoutalso flags 32.0% of other ECGsPhoto made by computer of a 3x4 printout: 80.7%80.7%
Share of ST elevation ECGs a fixed measuring rule found
RowShare found (percent)Low end of the rangeHigh end of the rangeLow endHigh endOther ECGs also flagged
12 full leads61.9%54.369.154.369.15.3%
3x4 printout50.0%42.457.642.457.66.2%
Photo made by computer of a 3x4 printout50.9%43.158.643.158.66.2%
12 full leads89.8%84.393.884.393.822.0%
3x4 printout81.2%74.786.774.786.730.2%
Photo made by computer of a 3x4 printout80.7%7486.37486.332.0%
n = 176 Chapman ECGs labelled ST elevation
Data: Chapman Shaoxing Ningbo ECGs (China): 176 labelled ST elevation and 2,000 others; photos made by computer of 3x4 printouts of 176 and 500 of them. Source: spikes/s4-measurements/RESULTS.md, section 3.5; spikes/s3-clean-vs-digitised/RESULTS.md, section 3.5.

61.9%

of ST elevation ECGs found at the definition thresholds on 12 full leads (50.0% on a 3x4 printout, 50.9% on photos)

n = 176 ECGs from China
Test S4 and test S3

Where this is weak

The more sensitive setting reaches 89.8% on 12 full leads but flags 22.0% of other ECGs; on a printout 81.2% and 30.2%; on photos 80.7% and 32.0%. Photos were measurable for 171 of the 176 ST elevation ECGs. Digitising is not the cause of the misses: the clean signal gave 50.0%.

Share of urgent heart rate and QTc patterns the safety net rules found

Simple rules on the measures, judged against the same rule on a reference ECG program's numbers, on every ECG in PTB-XL.

0%25%50%75%100%Share found (percent). The thin line is the 95% range.Very fast heart rate150 beats a minute or moreVery fast heart rate: 73 of 91 (80.2%)73 of 91 (80.2%)Wide and fast beatsQRS of 120 ms or more with a heart rate of 120 ormoreWide and fast beats: 33 of 52 (63.5%)33 of 52 (63.5%)Very slow heart rate40 beats a minute or fewerVery slow heart rate: 12 of 34 (35.3%)12 of 34 (35.3%)Very long QTc500 ms or more by both formulasVery long QTc: 10 of 291 (3.4%)10 of 291 (3.4%)
Share of urgent heart rate and QTc patterns the safety net rules found
RowShare found (percent)Low end of the rangeHigh end of the rangeFoundOut ofLow endHigh endExtra alarmsOn the 2,198 test ECGs
Very fast heart rate73 of 91 (80.2%)70.987.1739170.987.118 of 11
Wide and fast beats33 of 52 (63.5%)49.975.2335249.975.293 of 5
Very slow heart rate12 of 34 (35.3%)21.552.1123421.552.112 of 5
Very long QTc10 of 291 (3.4%)1.96.2102911.96.240 of 48
n = 21,799 PTB-XL ECGs, 12 full leads
Data: PTB-XL ECGs from Germany, original recordings; each rule judged against the same rule on a reference ECG program's numbers. Source: spikes/s4-measurements/RESULTS.md, sections 3.6 and 3.9.

3.4%

of very long QTc patterns found (10 of 291)

n = 21,799 ECGs from Germany
Test S4

Where this is weak

The rules find 80% of very fast heart rates and 35% of very slow ones, but only 3% of very long QTc. They cannot be relied on to catch these. On the 2,198 test ECGs alone the counts are 8 of 11, 3 of 5, 2 of 5 and 0 of 48.

The two reference programs disagree most about long QTc, so there is no solid reference for that rule.

Slow drift in the baseline cost 0.174 AUROC on ten second ECGs from Brazil

Some ECGs wander up and down slowly while they are recorded. TraceRead AI as first trained, on PTB-XL only, read these ten second ECGs worse until the drift was filtered out.

0.50coin toss0.600.700.800.901.00perfectAUROC. The thin line is the 95% range.Slow drift left inSlow drift left in: 0.8060.806Slow drift filtered outSlow drift filtered out: 0.9800.980
Slow drift in the baseline cost 0.174 AUROC on ten second ECGs from Brazil
RowAUROCLow end of the rangeHigh end of the range
Slow drift left in0.8060.7710.838
Slow drift filtered out0.9800.9720.987
n = 3,010 ten second ECGs from Brazil
Data: CODE-15% ECGs (Brazil), validation exams of ten seconds; macro AUROC over the six labels CODE-15% defines, TraceRead AI trained on PTB-XL only. Source: spikes/s2-classifier-baseline/RESULTS.md, part 2 section P2.4 Baseline wander explains most of what part 1 gets wrong on CODE-15%.

0.806

AUROC with the drift left in (0.980 filtered out)

n = 3,010 ECGs from Brazil
Test S2, part 2

Where this is weak

A version trained with the Brazilian ECGs added scored 0.981 on the same ECGs without the filter, so the drift mostly stopped mattering once it was in training.

Every ECG came from a public research dataset

Every photo result on this page comes from photos made by computer of public research ECGs recorded in Germany (PTB-XL), China (Chapman Shaoxing Ningbo) and Brazil (CODE-15%). None was recorded in Nigeria. No real phone photo has been scored.

Datasets, versions and licences

An AI first read is not the last word.

  • A qualified doctor reviews every AI first read. Nothing reaches a patient until a doctor signs it.
  • Do not rely on TraceRead alone in an emergency.
  • A normal AI first read does not rule out heart disease.
  • For adults, 18 and over.

Sources

Where every number comes from

Each chart names its result file and section under it. These are the files, in the TraceRead repository, that hold the numbers.

  • Spike S1, reading the paper

    • spikes/s1-digitisation/RESULTS.md
    • eval/levelC_test_per_lead.csv, levelC_test_per_layout.csv, levelA_test_per_lead.csv and levelA_test_per_layout.csv
  • Spike S2, finding patterns

    • spikes/s2-classifier-baseline/RESULTS.md
    • results/benchmark_fold10.csv
    • results/chapman_auroc_per_label.csv
    • results/traceread_layouts_fold10.csv
    • results/layout_cost_fold10.csv
  • Spike S3, photos against original recordings

    • spikes/s3-clean-vs-digitised/RESULTS.md
    • results/gap_baseline_test_main.csv
    • results/gap_finetuned_test_main.csv
    • results/gap_by_cut_leads_baseline_test.csv
    • results/abstain_finetuned_test.csv
    • results/st_path.csv
  • Spike S4, measuring

    • spikes/s4-measurements/RESULTS.md
  • Spike S5, the AWS region

    • spikes/s5-aws-region/RESULTS.md
  • Spike S6, capture

    • spikes/s6-capture/RESULTS.md
  • Spike S7, speed and cost

    • spikes/s7-inference/RESULTS.md
  • The 12 case study runs

    • apps/web/src/content/runs/index.json

The public datasets, their versions and licences are on the credits page. Every AI first read is for a qualified clinician to review.

See TraceRead read a paper ECG

We show you TraceRead reading public research ECGs, step by step, and talk through how your team prints, photographs and reads ECGs today.