This commit is contained in:
deng 2023-09-19 20:54:19 +08:00
commit 31770491ed
34 changed files with 563 additions and 0 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

BIN
Q1/.DS_Store vendored Normal file

Binary file not shown.

97
Q1/code.py Normal file
View File

@ -0,0 +1,97 @@
# code.py
# This is an image preprocessing code for HandBoneXRay data, please adopt env.yaml to
# create conda env to run this script
#
# author : deng
# date : 20230919
# platform: MacBook Pro 14 2021
import os
from shutil import rmtree
import cv2
import pydicom
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':
xray_dir = 'HandBoneXRay/'
result_dir = 'results'
plot = False
# Create result dir to save processed images
if os.path.isdir(result_dir):
rmtree(result_dir)
os.makedirs(result_dir)
# Get xray dicom paths
dicom_paths = [os.path.join(xray_dir, file_name)
for file_name in os.listdir(xray_dir)
if file_name.endswith('dcm')]
for dicom_path in dicom_paths:
print(f'Start to process {dicom_path}')
# Read image
ds = pydicom.dcmread(dicom_path)
pixel_array = ds.pixel_array
orig_pixel_array = pixel_array.copy()
if plot:
plt.title('Raw image')
plt.imshow(pixel_array, cmap='gray')
plt.show()
# Thresholding
pixel_array[pixel_array < 1] = 0
pixel_array[pixel_array >= 1] = 1
pixel_array = pixel_array.astype(np.uint8)
if plot:
plt.title('Thresholding')
plt.imshow(pixel_array, cmap='gray')
plt.show()
# Calculate rotation angle by minAreaRect method
contours, _ = cv2.findContours(pixel_array, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contour_w_max_area = max(contours, key = cv2.contourArea)
rect = cv2.minAreaRect(contour_w_max_area)
angle = rect[2]
if angle > 45:
angle -= 90
# Rotate image
h, w = orig_pixel_array.shape[:2]
center = rect[0]
matrix = cv2.getRotationMatrix2D(center, angle, 1.0)
rotated = cv2.warpAffine(orig_pixel_array, matrix, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_CONSTANT)
if plot:
plt.title('Rotated image')
plt.imshow(rotated, cmap='gray')
plt.show()
# Crop edge
xs, ys = np.nonzero(rotated)
x_min,x_max = xs.min(), xs.max()
y_min, y_max = ys.min(), ys.max()
cropped = rotated[x_min:x_max+1, y_min:y_max+1]
cropped = cropped.astype(np.uint16)
if plot:
plt.title('Cropped image')
plt.imshow(cropped, cmap='gray')
plt.show()
# Save it
save_path = os.path.join(result_dir, os.path.basename(dicom_path))
ds.PixelData = cropped
ds.Rows = cropped.shape[0]
ds.Columns = cropped.shape[1]
pydicom.filewriter.dcmwrite(save_path, ds)
if plot:
ds = pydicom.dcmread(save_path)
pixel_array = ds.pixel_array
plt.title('Saved image')
plt.imshow(pixel_array, cmap='gray')
plt.show()
print('done.')

134
Q1/env.yaml Normal file
View File

@ -0,0 +1,134 @@
name: Q1
channels:
- conda-forge
dependencies:
- aom=3.5.0
- brotli=1.1.0
- brotli-bin=1.1.0
- bzip2=1.0.8
- c-ares=1.19.1
- ca-certificates=2023.7.22
- cairo=1.16.0
- certifi=2023.7.22
- contourpy=1.1.1
- cycler=0.11.0
- dav1d=1.2.1
- expat=2.5.0
- ffmpeg=6.0.0
- font-ttf-dejavu-sans-mono=2.37
- font-ttf-inconsolata=3.000
- font-ttf-source-code-pro=2.038
- font-ttf-ubuntu=0.83
- fontconfig=2.14.2
- fonts-conda-ecosystem=1
- fonts-conda-forge=1
- fonttools=4.42.1
- freetype=2.12.1
- fribidi=1.0.10
- gettext=0.21.1
- gmp=6.2.1
- gnutls=3.7.8
- graphite2=1.3.13
- harfbuzz=8.2.0
- hdf5=1.14.2
- icu=73.2
- jasper=4.0.0
- kiwisolver=1.4.5
- krb5=1.21.2
- lame=3.100
- lcms2=2.15
- lerc=4.0.0
- libabseil=20230802.1
- libaec=1.0.6
- libass=0.17.1
- libblas=3.9.0
- libbrotlicommon=1.1.0
- libbrotlidec=1.1.0
- libbrotlienc=1.1.0
- libcblas=3.9.0
- libcurl=8.3.0
- libcxx=16.0.6
- libdeflate=1.19
- libedit=3.1.20191231
- libev=4.33
- libexpat=2.5.0
- libffi=3.4.2
- libgfortran=5.0.0
- libgfortran5=13.2.0
- libglib=2.78.0
- libiconv=1.17
- libidn2=2.3.4
- libjpeg-turbo=2.1.5.1
- liblapack=3.9.0
- liblapacke=3.9.0
- libnghttp2=1.52.0
- libopenblas=0.3.24
- libopencv=4.8.0
- libopenvino=2023.0.2
- libopenvino-arm-cpu-plugin=2023.0.2
- libopenvino-auto-batch-plugin=2023.0.2
- libopenvino-auto-plugin=2023.0.2
- libopenvino-hetero-plugin=2023.0.2
- libopenvino-ir-frontend=2023.0.2
- libopenvino-onnx-frontend=2023.0.2
- libopenvino-paddle-frontend=2023.0.2
- libopenvino-pytorch-frontend=2023.0.2
- libopenvino-tensorflow-frontend=2023.0.2
- libopenvino-tensorflow-lite-frontend=2023.0.2
- libopus=1.3.1
- libpng=1.6.39
- libprotobuf=4.23.4
- libsqlite=3.43.0
- libssh2=1.11.0
- libtasn1=4.19.0
- libtiff=4.6.0
- libunistring=0.9.10
- libvpx=1.13.0
- libwebp-base=1.3.2
- libxcb=1.15
- libxml2=2.11.5
- libzlib=1.2.13
- llvm-openmp=16.0.6
- matplotlib=3.8.0
- matplotlib-base=3.8.0
- munkres=1.1.4
- ncurses=6.4
- nettle=3.8.1
- numpy=1.26.0
- opencv=4.8.0
- openh264=2.3.1
- openjpeg=2.5.0
- openssl=3.1.2
- p11-kit=0.24.1
- packaging=23.1
- pcre2=10.40
- pillow=10.0.1
- pip=23.2.1
- pixman=0.40.0
- pthread-stubs=0.4
- pugixml=1.13
- py-opencv=4.8.0
- pydicom=2.4.3
- pyparsing=3.1.1
- python=3.10.12
- python-dateutil=2.8.2
- python_abi=3.10
- readline=8.2
- setuptools=68.2.2
- six=1.16.0
- snappy=1.1.10
- svt-av1=1.7.0
- tbb=2021.10.0
- tk=8.6.12
- tornado=6.3.3
- tzdata=2023c
- unicodedata2=15.0.0
- wheel=0.41.2
- x264=1!164.3095
- x265=3.5
- xorg-libxau=1.0.11
- xorg-libxdmcp=1.1.3
- xz=5.2.6
- zlib=1.2.13
- zstd=1.5.5
prefix: /Users/xiao_deng/miniforge3/envs/Q1

63
Q2/code.py Normal file
View File

@ -0,0 +1,63 @@
# code.py
# Please use env.yaml to build corresponding conda env if you want to run this script
#
# author : deng
# date : 20230919
# platform: MacBook Pro 14 2021
VALID_CHARS = ['T', 'F', 'O', 'A', '(', ')']
CAL_DICT = {
'T': 'T',
'F': 'F',
'TAT': 'T',
'TAF': 'F',
'FAT': 'F',
'FAF': 'F',
'TOT': 'T',
'TOF': 'T',
'FOT': 'T',
'FOF': 'F'
}
def log_cal(exp: str) -> str:
while True:
if exp in CAL_DICT:
return CAL_DICT[exp]
else:
try:
exp = CAL_DICT[exp[:3]] + exp[3:]
except KeyError:
return 'E'
def bool_exp(exp: str) -> str:
stack = []
for char in exp:
if char not in VALID_CHARS:
return 'E'
if char == ')':
sub_exp = ''
while True:
try:
val = stack.pop()
if val == '(':
break
sub_exp = val + sub_exp
except IndexError:
return 'E'
cal_exp = log_cal(sub_exp)
if cal_exp == 'E':
return 'E'
stack.append(cal_exp)
else:
stack.append(char)
return log_cal(''.join(stack))
if __name__ == '__main__':
exp = input('Please input expression:').upper()
print(bool_exp(exp))

20
Q2/env.yaml Normal file
View File

@ -0,0 +1,20 @@
name: Q2
channels:
- conda-forge
dependencies:
- bzip2=1.0.8
- ca-certificates=2023.7.22
- libffi=3.4.2
- libsqlite=3.43.0
- libzlib=1.2.13
- ncurses=6.4
- openssl=3.1.2
- pip=23.2.1
- python=3.10.12
- readline=8.2
- setuptools=68.2.2
- tk=8.6.12
- tzdata=2023c
- wheel=0.41.2
- xz=5.2.6
prefix: /Users/xiao_deng/miniforge3/envs/Q2

BIN
Q3/.DS_Store vendored Normal file

Binary file not shown.

52
Q3/code.py Normal file
View File

@ -0,0 +1,52 @@
# code.py
# Please use env.yaml to build corresponding conda env if you want to run this script
#
# author : deng
# date : 20230919
# platform: MacBook Pro 14 2021
import pandas
from sklearn import metrics
import matplotlib.pyplot as plt
if __name__ == '__main__':
csv_path = 'psudo_result.csv'
df = pandas.read_csv(csv_path)
df = df[:-1]
# Quick glance
print('Ground truth')
print(df['Ground truth'].value_counts())
print('Gender')
print(df['Gender'].value_counts())
print('Age')
plt.title('All patients')
plt.xlabel('age')
plt.ylabel('count')
df['Age'].hist(bins=20)
plt.show()
plt.title('Sick patients')
plt.xlabel('age')
plt.ylabel('count')
df[df['Ground truth'] == 'Sick']['Age'].hist(bins=20)
plt.show()
# Confusion Matrix
# threshold = 0.5
# gt = df['Ground truth']
# pred = ['Sick' if val >= threshold else 'No Sick'
# for val in df['AI pred']]
# print(metrics.classification_report(gt, pred))
# ROC curve
gt = [1 if val == 'Sick' else 0
for val in df['Ground truth']]
pred = df['AI pred']
fpr, tpr, thresholds = metrics.roc_curve(gt, pred, pos_label=1)
plt.title('ROC curve')
plt.plot(fpr, tpr)
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()

71
Q3/env.yaml Normal file
View File

@ -0,0 +1,71 @@
name: Q3
channels:
- conda-forge
dependencies:
- brotli=1.1.0
- brotli-bin=1.1.0
- bzip2=1.0.8
- ca-certificates=2023.7.22
- certifi=2023.7.22
- contourpy=1.1.1
- cycler=0.11.0
- fonttools=4.42.1
- freetype=2.12.1
- joblib=1.3.2
- kiwisolver=1.4.5
- lcms2=2.15
- lerc=4.0.0
- libblas=3.9.0
- libbrotlicommon=1.1.0
- libbrotlidec=1.1.0
- libbrotlienc=1.1.0
- libcblas=3.9.0
- libcxx=16.0.6
- libdeflate=1.19
- libffi=3.4.2
- libgfortran=5.0.0
- libgfortran5=13.2.0
- libjpeg-turbo=2.1.5.1
- liblapack=3.9.0
- libopenblas=0.3.24
- libpng=1.6.39
- libsqlite=3.43.0
- libtiff=4.6.0
- libwebp-base=1.3.2
- libxcb=1.15
- libzlib=1.2.13
- llvm-openmp=16.0.6
- matplotlib=3.8.0
- matplotlib-base=3.8.0
- munkres=1.1.4
- ncurses=6.4
- numpy=1.26.0
- openjpeg=2.5.0
- openssl=3.1.2
- packaging=23.1
- pandas=2.1.0
- pillow=10.0.1
- pip=23.2.1
- pthread-stubs=0.4
- pyparsing=3.1.1
- python=3.10.12
- python-dateutil=2.8.2
- python-tzdata=2023.3
- python_abi=3.10
- pytz=2023.3.post1
- readline=8.2
- scikit-learn=1.3.0
- scipy=1.11.2
- setuptools=68.2.2
- six=1.16.0
- threadpoolctl=3.2.0
- tk=8.6.12
- tornado=6.3.3
- tzdata=2023c
- unicodedata2=15.0.0
- wheel=0.41.2
- xorg-libxau=1.0.11
- xorg-libxdmcp=1.1.3
- xz=5.2.6
- zstd=1.5.5
prefix: /Users/xiao_deng/miniforge3/envs/Q3

102
Q3/psudo_result.csv Normal file
View File

@ -0,0 +1,102 @@
Sample ID,Gender,Age,AI pred,Ground truth
S_0,Male,42.0,0.183843222651211,No Sick
S_1,Male,54.0,0.032451971485353635,No Sick
S_2,Male,27.0,0.1649091208860276,No Sick
S_3,Female,51.0,0.9838273079563034,Sick
S_4,Female,32.0,0.7008005948749091,No Sick
S_5,Female,50.0,0.04646539805577132,No Sick
S_6,Female,63.0,0.37605963432485756,No Sick
S_7,Male,48.0,0.5221502126827561,Sick
S_8,Female,43.0,0.6380703073440606,No Sick
S_9,Male,50.0,0.16000187268400592,No Sick
S_10,Female,33.0,0.8684964025015954,No Sick
S_11,Female,52.0,0.6292457724763052,No Sick
S_12,Male,49.0,0.4549646243576516,Sick
S_13,Female,26.0,0.5097453569913539,No Sick
S_14,Female,60.0,0.3337711914417254,No Sick
S_15,Female,48.0,0.019190399941885428,No Sick
S_16,Male,47.0,0.04086642173184299,No Sick
S_17,Female,54.0,0.18241359146528532,No Sick
S_18,Male,58.0,0.32089169346089924,No Sick
S_19,Female,36.0,0.413237627716878,Sick
S_20,Female,48.0,0.13062595790437023,No Sick
S_21,Female,56.0,0.29018011048552517,No Sick
S_22,Female,53.0,0.2555372095893874,No Sick
S_23,Female,44.0,0.09580993903210833,No Sick
S_24,Male,55.0,0.6877916599706746,Sick
S_25,Male,56.0,0.40153291103181854,Sick
S_26,Male,44.0,0.17088154472476824,No Sick
S_27,Male,60.0,0.28903419437712474,No Sick
S_28,Male,39.0,0.3059480568045402,No Sick
S_29,Female,51.0,0.30293016203624257,No Sick
S_30,Male,32.0,0.5986074572752382,Sick
S_31,Male,61.0,0.1679725784069874,No Sick
S_32,Female,20.0,0.19933363134841395,No Sick
S_33,Female,75.0,0.2936272223993208,No Sick
S_34,Female,60.0,0.38458266378064254,No Sick
S_35,Female,36.0,0.5476216653350379,No Sick
S_36,Female,22.0,0.2540285986407038,No Sick
S_37,Female,41.0,0.30688487550042554,No Sick
S_38,Male,58.0,0.010881451914966034,No Sick
S_39,Female,57.0,0.3141640693118162,No Sick
S_40,Female,57.0,0.19447009952931774,No Sick
S_41,Male,49.0,0.33065208227575404,Sick
S_42,Female,59.0,0.751020059639999,Sick
S_43,Male,73.0,0.2874468176061555,No Sick
S_44,Male,47.0,0.12089859681706382,No Sick
S_45,Male,66.0,0.17528475949731379,No Sick
S_46,Female,64.0,0.8819982427894725,No Sick
S_47,Female,42.0,0.5005003573463266,No Sick
S_48,Female,43.0,0.2745791003849961,No Sick
S_49,Female,45.0,0.4161238121442544,No Sick
S_50,Male,35.0,0.41528904708151504,No Sick
S_51,Female,52.0,0.8146647348503631,No Sick
S_52,Male,49.0,0.17604193457147554,No Sick
S_53,Male,53.0,0.05322796458244725,No Sick
S_54,Female,45.0,0.4299485265172557,No Sick
S_55,Female,63.0,0.35375757738991287,No Sick
S_56,Male,37.0,0.2164630863950512,No Sick
S_57,Female,43.0,0.7542813473217973,No Sick
S_58,Male,40.0,0.12277033509439539,No Sick
S_59,Male,57.0,0.028993766542943746,No Sick
S_60,Male,63.0,0.1840667841524664,No Sick
S_61,Female,42.0,0.9182713866681889,No Sick
S_62,Female,38.0,0.4997258327162861,No Sick
S_63,Female,27.0,0.057822477359941504,No Sick
S_64,Male,45.0,0.2869275808238832,No Sick
S_65,Male,56.0,0.27075663892334423,No Sick
S_66,Female,78.0,0.5147121232117046,Sick
S_67,Male,57.0,0.4303055422658295,Sick
S_68,Female,65.0,0.5790290855646982,No Sick
S_69,Male,34.0,0.4488264948240428,No Sick
S_70,Male,52.0,0.31922894933435064,No Sick
S_71,Male,48.0,0.2704984074393081,No Sick
S_72,Female,57.0,0.5318201811015301,No Sick
S_73,Female,45.0,0.915191370314399,No Sick
S_74,Male,33.0,0.16627710406505336,No Sick
S_75,Male,57.0,0.9744135322178493,Sick
S_76,Male,36.0,0.3890723811007448,No Sick
S_77,Male,50.0,0.4782644098424499,No Sick
S_78,Female,33.0,0.5124992859909004,Sick
S_79,Male,36.0,0.11506051247073344,No Sick
S_80,Male,62.0,0.3673796432900976,No Sick
S_81,Male,56.0,0.061334487122536044,No Sick
S_82,Female,50.0,0.5792648132889187,No Sick
S_83,Female,55.0,0.33218576134014133,No Sick
S_84,Male,39.0,0.32085392248494365,No Sick
S_85,Male,34.0,0.04450511997589546,No Sick
S_86,Male,67.0,0.15133055497828424,No Sick
S_87,Female,50.0,0.18709959213671942,No Sick
S_88,Male,53.0,0.10073701418285581,No Sick
S_89,Male,35.0,0.5110592056032592,Sick
S_90,Male,38.0,0.8793802677769047,Sick
S_91,Female,47.0,0.1247705954358479,No Sick
S_92,Female,51.0,0.23236933325127848,No Sick
S_93,Female,64.0,0.5361768277573149,No Sick
S_94,Male,39.0,0.7145348867998527,Sick
S_95,Female,49.0,0.8949969712274917,No Sick
S_96,Female,51.0,0.4008792149067575,No Sick
S_97,Female,51.0,0.37491428399612803,No Sick
S_98,Female,39.0,0.3545989884164421,No Sick
S_99,Male,51.0,0.26829780510576695,No Sick
,,,,
1 Sample ID Gender Age AI pred Ground truth
2 S_0 Male 42.0 0.183843222651211 No Sick
3 S_1 Male 54.0 0.032451971485353635 No Sick
4 S_2 Male 27.0 0.1649091208860276 No Sick
5 S_3 Female 51.0 0.9838273079563034 Sick
6 S_4 Female 32.0 0.7008005948749091 No Sick
7 S_5 Female 50.0 0.04646539805577132 No Sick
8 S_6 Female 63.0 0.37605963432485756 No Sick
9 S_7 Male 48.0 0.5221502126827561 Sick
10 S_8 Female 43.0 0.6380703073440606 No Sick
11 S_9 Male 50.0 0.16000187268400592 No Sick
12 S_10 Female 33.0 0.8684964025015954 No Sick
13 S_11 Female 52.0 0.6292457724763052 No Sick
14 S_12 Male 49.0 0.4549646243576516 Sick
15 S_13 Female 26.0 0.5097453569913539 No Sick
16 S_14 Female 60.0 0.3337711914417254 No Sick
17 S_15 Female 48.0 0.019190399941885428 No Sick
18 S_16 Male 47.0 0.04086642173184299 No Sick
19 S_17 Female 54.0 0.18241359146528532 No Sick
20 S_18 Male 58.0 0.32089169346089924 No Sick
21 S_19 Female 36.0 0.413237627716878 Sick
22 S_20 Female 48.0 0.13062595790437023 No Sick
23 S_21 Female 56.0 0.29018011048552517 No Sick
24 S_22 Female 53.0 0.2555372095893874 No Sick
25 S_23 Female 44.0 0.09580993903210833 No Sick
26 S_24 Male 55.0 0.6877916599706746 Sick
27 S_25 Male 56.0 0.40153291103181854 Sick
28 S_26 Male 44.0 0.17088154472476824 No Sick
29 S_27 Male 60.0 0.28903419437712474 No Sick
30 S_28 Male 39.0 0.3059480568045402 No Sick
31 S_29 Female 51.0 0.30293016203624257 No Sick
32 S_30 Male 32.0 0.5986074572752382 Sick
33 S_31 Male 61.0 0.1679725784069874 No Sick
34 S_32 Female 20.0 0.19933363134841395 No Sick
35 S_33 Female 75.0 0.2936272223993208 No Sick
36 S_34 Female 60.0 0.38458266378064254 No Sick
37 S_35 Female 36.0 0.5476216653350379 No Sick
38 S_36 Female 22.0 0.2540285986407038 No Sick
39 S_37 Female 41.0 0.30688487550042554 No Sick
40 S_38 Male 58.0 0.010881451914966034 No Sick
41 S_39 Female 57.0 0.3141640693118162 No Sick
42 S_40 Female 57.0 0.19447009952931774 No Sick
43 S_41 Male 49.0 0.33065208227575404 Sick
44 S_42 Female 59.0 0.751020059639999 Sick
45 S_43 Male 73.0 0.2874468176061555 No Sick
46 S_44 Male 47.0 0.12089859681706382 No Sick
47 S_45 Male 66.0 0.17528475949731379 No Sick
48 S_46 Female 64.0 0.8819982427894725 No Sick
49 S_47 Female 42.0 0.5005003573463266 No Sick
50 S_48 Female 43.0 0.2745791003849961 No Sick
51 S_49 Female 45.0 0.4161238121442544 No Sick
52 S_50 Male 35.0 0.41528904708151504 No Sick
53 S_51 Female 52.0 0.8146647348503631 No Sick
54 S_52 Male 49.0 0.17604193457147554 No Sick
55 S_53 Male 53.0 0.05322796458244725 No Sick
56 S_54 Female 45.0 0.4299485265172557 No Sick
57 S_55 Female 63.0 0.35375757738991287 No Sick
58 S_56 Male 37.0 0.2164630863950512 No Sick
59 S_57 Female 43.0 0.7542813473217973 No Sick
60 S_58 Male 40.0 0.12277033509439539 No Sick
61 S_59 Male 57.0 0.028993766542943746 No Sick
62 S_60 Male 63.0 0.1840667841524664 No Sick
63 S_61 Female 42.0 0.9182713866681889 No Sick
64 S_62 Female 38.0 0.4997258327162861 No Sick
65 S_63 Female 27.0 0.057822477359941504 No Sick
66 S_64 Male 45.0 0.2869275808238832 No Sick
67 S_65 Male 56.0 0.27075663892334423 No Sick
68 S_66 Female 78.0 0.5147121232117046 Sick
69 S_67 Male 57.0 0.4303055422658295 Sick
70 S_68 Female 65.0 0.5790290855646982 No Sick
71 S_69 Male 34.0 0.4488264948240428 No Sick
72 S_70 Male 52.0 0.31922894933435064 No Sick
73 S_71 Male 48.0 0.2704984074393081 No Sick
74 S_72 Female 57.0 0.5318201811015301 No Sick
75 S_73 Female 45.0 0.915191370314399 No Sick
76 S_74 Male 33.0 0.16627710406505336 No Sick
77 S_75 Male 57.0 0.9744135322178493 Sick
78 S_76 Male 36.0 0.3890723811007448 No Sick
79 S_77 Male 50.0 0.4782644098424499 No Sick
80 S_78 Female 33.0 0.5124992859909004 Sick
81 S_79 Male 36.0 0.11506051247073344 No Sick
82 S_80 Male 62.0 0.3673796432900976 No Sick
83 S_81 Male 56.0 0.061334487122536044 No Sick
84 S_82 Female 50.0 0.5792648132889187 No Sick
85 S_83 Female 55.0 0.33218576134014133 No Sick
86 S_84 Male 39.0 0.32085392248494365 No Sick
87 S_85 Male 34.0 0.04450511997589546 No Sick
88 S_86 Male 67.0 0.15133055497828424 No Sick
89 S_87 Female 50.0 0.18709959213671942 No Sick
90 S_88 Male 53.0 0.10073701418285581 No Sick
91 S_89 Male 35.0 0.5110592056032592 Sick
92 S_90 Male 38.0 0.8793802677769047 Sick
93 S_91 Female 47.0 0.1247705954358479 No Sick
94 S_92 Female 51.0 0.23236933325127848 No Sick
95 S_93 Female 64.0 0.5361768277573149 No Sick
96 S_94 Male 39.0 0.7145348867998527 Sick
97 S_95 Female 49.0 0.8949969712274917 No Sick
98 S_96 Female 51.0 0.4008792149067575 No Sick
99 S_97 Female 51.0 0.37491428399612803 No Sick
100 S_98 Female 39.0 0.3545989884164421 No Sick
101 S_99 Male 51.0 0.26829780510576695 No Sick
102

BIN
Q3/report.pptx Normal file

Binary file not shown.

BIN
Q3/roc_curve.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# everfortuneai_interview
長佳智能AI工程師面試2023

21
上機考題_v5.txt Normal file
View File

@ -0,0 +1,21 @@
第一題
1. 目標將HandBoneXRay.zip影像中的黑背景去掉並轉正手部X光影像。當你成功開啟dicom檔影像之後你會發現有部份影像不是整張都是手部X光影像看起來像是X光影像丟在某個黑色背景上再翻拍成電子檔。例如
22b63b2c78bc96711c0af031585f327874f56f18a5f42a6a7f004b8ce4a8ed26.dcm
這個檔就有這個現象。如果看不出來,調整一下對比度(window level)。
2. 交付項目將處理好的影像存成同檔名的dicom檔共十張。處理的程式碼py檔或notebook檔都可以。
3. 內容要求請使用python處理搭配pydicom模組。
第二題
讓使用者輸入一個由()AOTF 等字元構成的字串,程式運算輸出 T 或 F 或 E。
符號與運算方式說明如下T 代表 TrueF 代表 FalseA 代表 andO 代表
or運算優先順序為括號內先運算、由左到右運算。
TAT = TOF = FOT = T
TAF = FAT = FOF = F
若輸入的字串語法錯誤則輸出 E。例如
輸入 TA(TOFAT)OF輸出 T
輸入 TATT輸出 E。
PS.禁用eval()函數
TOFOF
第三題
附件psudo_result.csv中是某POC (proof of concept) AI測試集的結果這個AI是拿來用在預測急診室中的某項檢傷分類疾病該模型的輸入是胸腔X光影像。假設你是這個AI模型的開發者請根據這個表格整理成一份不得超過兩頁的投影片報告。報告目標至少呈現AI的performance以及建議。使用MS power point或者google投影片製作皆可。