Spaces:
Sleeping
Sleeping
import gradio as gr | |
from PIL import Image | |
import numpy as np | |
import faiss | |
import torch | |
#載入聊天機器人模型 | |
from transformers import AutoTokenizer, AutoModelForCausalLM,TextIteratorStreamer,AutoModel | |
from threading import Thread | |
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B-Instruct") | |
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B-Instruct") | |
# device = "cuda" | |
# model.to(device) | |
def chat(message, history): | |
prompt = [ | |
{"role": "system", "content": "You are a helpful assistant."}, | |
] | |
for i in history: | |
prompt.append({"role": "user", "content": i[0]}) | |
prompt.append({"role": "assisant", "content": i[1]}) | |
prompt.append({"role": "user", "content": message}) | |
messages = prompt | |
text = tokenizer.apply_chat_template( | |
messages, | |
tokenize=False, | |
add_generation_prompt=True | |
) | |
# model_inputs = tokenizer([text], return_tensors="pt").to("cuda") | |
model_inputs = tokenizer([text], return_tensors="pt") | |
streamer = TextIteratorStreamer(tokenizer, timeout=10., skip_prompt=True, skip_special_tokens=True) | |
generate_kwargs = dict( | |
model_inputs, | |
streamer=streamer, | |
max_new_tokens=512, | |
do_sample=True, | |
top_p=0.95, | |
top_k=1000, | |
temperature=1.0, | |
) | |
t = Thread(target=model.generate, kwargs=generate_kwargs) | |
t.start() | |
partial_message = "" | |
for new_token in streamer: | |
partial_message += new_token | |
yield partial_message | |
#AI履歷助手(使用RAG) | |
embd= AutoModel.from_pretrained('jinaai/jina-embeddings-v2-base-zh', trust_remote_code=True, torch_dtype=torch.bfloat16) | |
doc={'自我介紹':''' | |
我是一名專注於深度學習、數據分析和Web開發的技術專業人士,求學期間積極考取多項資訊相關的硬體和軟體證照,具備豐富的實務經驗與扎實的技術基礎。在學術方面,我曾於ICIM2024研討會發表論文,並擔任類神經網路課程助教,協助學生掌握機器學習技術。此外,我在大學專題實務成果展中獲得亞軍及技術類業界評選第一名,展現了我在專案開發中的實力。 | |
我的研究專注於基於情緒支持的對話系統,設計能夠感知情緒並提供適當回應的聊天機器人,幫助情緒困擾者緩解短期心理壓力。該研究結合情緒標籤與關鍵字識別技術,顯著提升了回應的準確性與用戶體驗。 | |
我擅長團隊合作,喜歡在專案中提出創新想法,並與團隊成員進行有效的交流與討論。曾參與的技術專案包括學生點名系統、氣管插管預測和貨車車牌辨識系統,這些專案展現了我在後端開發和深度學習技術上的靈活應用。此外,我熟悉使用Laravel等Web框架進行全端開發,並在專案實踐中進一步強化了協作能力與責任感。 | |
在AI技術快速變化的時代,持續學習與自我提升至關重要。出於對人工智慧的熱忱,我利用課餘時間不斷精進自己對AI技術的理解。例如,我使用RAG技術來增強語言模型的回應能力,這項技術能夠在不進行大量運算或額外訓練的情況下,快速構建專屬的客製化聊天機器人。 | |
未來,我期待繼續發揮我的專業知識與熱情,為公司與社會創造更多價值。 | |
''', | |
'技能':'python,深度學習,web開發,數據分析', | |
'經歷':'ICIM2024研討會、碩士期間擔任指導教授所開的類神經網路課程助教、大學專題實務成果展競賽亞軍,技術類業界評選第一名。', | |
'論文概述':'題為「基於情緒支持的對話:融合情緒感知和關鍵字識別的研究」。研究旨在通過聊天機器人為情緒困擾者提供陪伴,緩解其短期心理壓力。本文提出的模型結合情緒標籤和關鍵字識別技術,與其他基礎模型相比,能夠提供更精準的回復,從而更有效地支持用戶的情緒需求。', | |
'證照':'電腦硬體裝修丙級、電腦硬體裝修乙級、Database Administration Fundamentals、Software Development Fundamentals、Networking Fundamentals、CRM Merchandise Analyst、Enterprise Resource Planning', | |
'助教工作內容':'主要協助老師指導學生實作部分。包括使用 WEKA 軟體教導學生快速構建和分析機器學習模型,並解釋模型結果的含義。後期則引導學生安裝 Python 環境,撰寫並執行機器學習模型的程式碼,幫助學生在未來能夠運用 AI 技術更有效地完成工作。', | |
'專題內容':'專題名稱:熱影像結合人臉偵測暨網頁瀏覽系統。為因應新冠疫情,無接觸體溫檢測需求激增,本專題開發了利用紅外線熱影像和後端資料庫蒐集,最終實現異地閱覽和確保體溫監測的安全與效率。/n我的貢獻:硬體設備組裝、人臉偵測和後端資料庫及視覺化', | |
'專案':'學生點名系統、氣管插管預測、貨車車牌辨識、聊天機器人', | |
'學生點名系統簡述':''' | |
動機與目的: 鑒於每次上課點名都是老師的一大負擔,開發了這個學生點名系統,旨在幫助老師更有效地進行點名。本專案使用 Laravel 開源 PHP Web 框架開發,主要功能包括: | |
老師功能: | |
- 查看課表及點名記錄 | |
- 查看學生出缺席和請假狀況 | |
- 審核學生請假申請 | |
學生功能: | |
- 查看課表及進行點名 | |
- 查看出缺席和請假記錄 | |
- 申請請假 | |
該完整專案在github上,網址:https://github.com/WISD-2020/final02 | |
''', | |
'氣管插管預測簡述':'動機與目的:為了協助醫生在執行插管時更精確地將氧氣管置入正確位置,我們利用影像分割技術(如 TransUnet、UNet++ 等)來實現該目標。最後,我們結合邊緣檢測與形態學技術,精確量化預測與實際的誤差,以提高插管的成功率並降低風險。', | |
'貨車車牌辨識簡述':'動機與目的:為了提高貨車進出倉庫的效率,我們建立一個車牌辨識系統,該系統基於深度學習技術,主要透過yolo來偵測車牌位置,再透過OCR技術來識別車牌號碼,最後將車牌號碼與倉庫數據庫進行比對,以確保進出貨物的準確性。 ', | |
'聊天機器人簡述':'過去在研究語言模型時,尚未設計與機器人對話的專屬介面,因此這次實作了一個簡單的聊天機器人介面。該聊天機器人基於 Qwen 大型預訓練語言模型,這是一個多語言支持的模型,供使用者進行互動體驗。', | |
} | |
docs=[ | |
'''自我介紹: | |
我是一名專注於深度學習、數據分析和Web開發的技術專業人士,求學期間積極考取多項資訊相關的硬體和軟體證照,具備豐富的實務經驗與扎實的技術基礎。在學術方面,我曾於ICIM2024研討會發表論文,並擔任類神經網路課程助教,協助學生掌握機器學習技術。此外,我在大學專題實務成果展中獲得亞軍及技術類業界評選第一名,展現了我在專案開發中的實力。 | |
我的研究專注於基於情緒支持的對話系統,設計能夠感知情緒並提供適當回應的聊天機器人,幫助情緒困擾者緩解短期心理壓力。該研究結合情緒標籤與關鍵字識別技術,顯著提升了回應的準確性與用戶體驗。 | |
我擅長團隊合作,喜歡在專案中提出創新想法,並與團隊成員進行有效的交流與討論。曾參與的技術專案包括學生點名系統、氣管插管預測和貨車車牌辨識系統,這些專案展現了我在後端開發和深度學習技術上的靈活應用。此外,我熟悉使用Laravel等Web框架進行全端開發,並在專案實踐中進一步強化了協作能力與責任感。 | |
在AI技術快速變化的時代,持續學習與自我提升至關重要。出於對人工智慧的熱忱,我利用課餘時間不斷精進自己對AI技術的理解。例如,我使用RAG技術來增強語言模型的回應能力,這項技術能夠在不進行大量運算或額外訓練的情況下,快速構建專屬的客製化聊天機器人。 | |
未來,我期待繼續發揮我的專業知識與熱情,為公司與社會創造更多價值。 | |
''', | |
'主要的技能(技術)包含:python,深度學習,web開發,數據分析', | |
'特別經歷包含:ICIM2024研討會、碩士期間擔任指導教授所開的類神經網路課程助教、大學專題實務成果展競賽亞軍,技術類業界評選第一名。', | |
'論文概述:題為「基於情緒支持的對話:融合情緒感知和關鍵字識別的研究」。研究旨在通過聊天機器人為情緒困擾者提供陪伴,緩解其短期心理壓力。本文提出的模型結合情緒標籤和關鍵字識別技術,與其他基礎模型相比,能夠提供更精準的回復,從而更有效地支持用戶的情緒需求。', | |
'在高中和大學時期所拿到的證照有:電腦硬體裝修丙級、電腦硬體裝修乙級、Database Administration Fundamentals、Software Development Fundamentals、Networking Fundamentals、CRM Merchandise Analyst、Enterprise Resource Planning', | |
'助教工作內容:主要協助老師指導學生實作部分。包括使用 WEKA 軟體教導學生快速構建和分析機器學習模型,並解釋模型結果的含義。後期則引導學生安裝 Python 環境,撰寫並執行機器學習模型的程式碼,幫助學生在未來能夠運用 AI 技術更有效地完成工作。', | |
'大學專題內容:專題名稱:熱影像結合人臉偵測暨網頁瀏覽系統。為因應新冠疫情,無接觸體溫檢測需求激增,本專題開發了利用紅外線熱影像和後端資料庫蒐集,最終實現異地閱覽和確保體溫監測的安全與效率。/n我的貢獻:硬體設備組裝、人臉偵測和後端資料庫及視覺化', | |
'參與過的專案包含:學生點名系統、氣管插管預測、貨車車牌辨識、聊天機器人', | |
'''學生點名系統簡述: | |
動機與目的: 鑒於每次上課點名都是老師的一大負擔,開發了這個學生點名系統,旨在幫助老師更有效地進行點名。本專案使用 Laravel 開源 PHP Web 框架開發,主要功能包括: | |
老師功能: | |
- 查看課表及點名記錄 | |
- 查看學生出缺席和請假狀況 | |
- 審核學生請假申請 | |
學生功能: | |
- 查看課表及進行點名 | |
- 查看出缺席和請假記錄 | |
- 申請請假 | |
該完整專案在github上,網址:https://github.com/WISD-2020/final02 | |
''', | |
'氣管插管預測簡述:動機與目的:為了協助醫生在執行插管時更精確地將氧氣管置入正確位置,我們利用影像分割技術(如 TransUnet、UNet++ 等)來實現該目標。最後,我們結合邊緣檢測與形態學技術,精確量化預測與實際的誤差,以提高插管的成功率並降低風險。', | |
'貨車車牌辨識簡述:動機與目的:為了提高貨車進出倉庫的效率,我們建立一個車牌辨識系統,該系統基於深度學習技術,主要透過yolo來偵測車牌位置,再透過OCR技術來識別車牌號碼,最後將車牌號碼與倉庫數據庫進行比對,以確保進出貨物的準確性。 ', | |
'聊天機器人簡述:過去在研究語言模型時,尚未設計與機器人對話的專屬介面,因此這次實作了一個簡單的聊天機器人介面。該聊天機器人基於 Qwen 大型預訓練語言模型,這是一個多語言支持的模型,供使用者進行互動體驗。', | |
] | |
def get_embedding(text): | |
embd_ = embd.encode(text) | |
embd_ = embd_ / np.linalg.norm(embd_) # 归一化 | |
return embd_ | |
#建立嵌入向量庫 | |
def add_to_faiss_index(embeddings): | |
vector = np.array(embeddings) | |
# 设置检索维度 | |
index = faiss.IndexFlatIP(vector.shape[1]) | |
faiss.normalize_L2(vector) | |
index.add(vector) | |
return index | |
embedding_array = [get_embedding(text) for text in doc] | |
faiss_index =add_to_faiss_index(embedding_array) | |
embedding_array_1 = [get_embedding(text) for text in docs] | |
faiss_index_1 =add_to_faiss_index(embedding_array_1 ) | |
def vector_search(index,index_1, query_embedding, k=3, threshold=0.5): | |
distances, indices = index.search(np.array([query_embedding]), k) | |
# 如果想要筛选相似度大于某个阈值的结果,可以这样做 | |
results = [] | |
for i in range(k): | |
if distances[0][i] > threshold: # 余弦相似度的距离应该是越大越相似 | |
results.append(docs[indices[0][i]]) | |
if not results: | |
distances, indices = index_1.search(np.array([query_embedding]), k) | |
for i in range(k): | |
if distances[0][i] > 0.4: # 余弦相似度的距离应该是越大越相似 | |
results.append(docs[indices[0][i]]) | |
if not results: | |
results.append(docs[indices[0][0]]) | |
return results | |
def resume_QA(message, history): | |
if history is not None: | |
user_q= [m[0] for m in history ] | |
user_q='\n'.join(user_q) | |
query_embedding = get_embedding(user_q+'\n'+message) | |
search_results = vector_search(faiss_index,faiss_index_1, query_embedding) | |
search_results='\n'.join(search_results) | |
print(search_results) | |
prompt = [ | |
{"role": "system", "content":f""" | |
你是一位助手,幫助人家了解巫宇哲這個人。你只能根據下列提供的資訊回答問題,並且所有回答必須完全符合已提供的資訊,不能添加任何新內容或自己推測的訊息。如果問題的答案不在提供的資訊中,請明確回答 "沒有這方面的資料"。所有回答必須基於已提供的資料。 | |
並且**嚴禁提及自己是 AI 或無法回答問題**。所有回答必須基於已提供的資料,禁止出現類似「在這個特定的環境下,我無法提供詳細信息」、「我是AI,無法回答此問題」或任何與 AI 自身相關的回覆。 | |
提供的資訊: | |
Name: 巫宇哲 | |
{search_results} | |
請根據上面的資訊來回答問題。 | |
"""} | |
] | |
for i in history: | |
prompt.append({"role": "user", "content": i[0]}) | |
prompt.append({"role": "assisant", "content": i[1]}) | |
prompt.append({"role": "user", "content": message}) | |
messages = prompt | |
text = tokenizer.apply_chat_template( | |
messages, | |
tokenize=False, | |
add_generation_prompt=True | |
) | |
model_inputs = tokenizer([text], return_tensors="pt") | |
streamer = TextIteratorStreamer(tokenizer, timeout=50., skip_prompt=True, skip_special_tokens=True) | |
generate_kwargs = dict( | |
model_inputs, | |
streamer=streamer, | |
max_new_tokens=512, | |
do_sample=True, | |
temperature=0.7, | |
top_k=5, | |
top_p=0.7, | |
min_length=50, | |
) | |
t = Thread(target=model.generate, kwargs=generate_kwargs) | |
t.start() | |
partial_message = "" | |
for new_token in streamer: | |
partial_message += new_token | |
yield partial_message | |
avatar_images = ["https://cdn-icons-png.flaticon.com/128/3135/3135715.png", | |
"https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTIJYnfODgs7q_Q4k6RoUL592NBlSF7wUTEhT92lRyqc4HTunB-"] | |
custom_css = """ | |
.gradio-container {background-color: #f0f0f0;padding-top: 0px !important;} | |
/*.container {max-width: 100px; margin: 0; font-family: 'Arial', sans-serif;}*/ | |
.header {background-color: #2c3e50; color: white; padding: 10px; text-align: center; border-radius: 10px 10px 0 0;margin-bottom: 0; /* Ensure no margin below header */} | |
.content {background-color: white; padding: 10px; border-radius: 0 0 10px 10px; margin: 0;margin-top: 0;} | |
.profile-pic {width: 150px; height: 150px; border-radius: 50%; margin: 20px auto; display: block;} | |
.skills {display: flex; justify-content: space-around; margin-top: 20px;margin-bottom: 20px;} | |
.skill {text-align: center; padding: 10px; background-color: #ecf0f1; border-radius: 5px;} | |
.cert-row {border-bottom: 1px solid #ddd; padding: 10px 0;} | |
.cert-header {background-color: #f2f2f2; font-weight: bold;} | |
/* footer styling */ | |
.gradio-container footer { | |
display: none !important; | |
} | |
.custom-footer { | |
text-align: center; | |
padding: 0; /* 减小上下内边距 */ | |
# line-height: 1.2; /* 减小行高 */ | |
margin-top: 0; /* 减小与上方内容的间距 */ | |
margin-bottom: 0; /* 减小与下方内容的间距 */ | |
} | |
.custom-footer p { | |
margin: 0; /* 移除段落的默认外边距 */ | |
} | |
/* 主要針對chatbot聊天對話框設計版面*/ | |
.custom-chatbot { | |
background-color: #FBFBFF !important; /* 機器人對話框背景顏色 */ | |
} | |
.custom-chatbot .flex-wrap.user { | |
background-color: #ECF5FF !important; /* 使用者訊息框的背景顏色 */ | |
border: solid 1px #E6CAFF | |
} | |
.custom-chatbot .flex-wrap.bot { | |
background-color: #ECF5FF !important; /* 使用者訊息框的背景顏色 */ | |
border: solid 1px #E6CAFF | |
} | |
.custom-chatbot label.svelte-1b6s6s { | |
background-color: #E8FFF5 !important; /* 設定背景顏色 */ | |
} | |
button.lg.primary.svelte-cmf5ev { | |
background-image: linear-gradient(120deg, #a1c4fd 0%, #c2e9fb 100%) !important; /* 按鈕背景顏色 */ | |
color: #4F4F4F !important; /* 文字顏色 */ | |
} | |
""" | |
custom_footer = """ | |
<div class="custom-footer"> | |
<p>© 2024 Your Company Name. All rights reserved.</p> | |
</div> | |
""" | |
def load_image(image_path): | |
img = Image.open(image_path) | |
return np.array(img) | |
#讀取頭貼 | |
image_path = "/content/drive/My Drive/個人資料/頭貼.jpg" | |
# profile_array = load_image(image_path) | |
#讀去證照圖片 | |
import gradio as gr | |
def render_html(prove): | |
if prove is not None: | |
return f'<a href="{prove}" target="_blank">點擊查看證明</a>' | |
else: | |
return '' | |
with gr.Blocks(css=custom_css,title='我的履歷') as resume_app:# title可以修改页面标题 | |
# with gr.Column(): | |
gr.HTML(""" | |
<div class="header"> | |
<h1>巫宇哲的個人簡歷</h1> | |
<p>軟體工程師 | AI 愛好者 | 數據分析師</p> | |
</div> | |
""") | |
with gr.Tab("履歷資料",elem_classes="content"): | |
with gr.Row(): | |
with gr.Column(scale=1): | |
gr.Image('履歷資料/頭貼.jpg', elem_classes="profile-pic",show_label=False) | |
gr.Markdown(""" | |
<div style="text-align:center;"> | |
<p style="margin-bottom: 0;"> | |
📧 <a href="mailto:a0903153387@yahoo.com.tw" style="text-decoration: none; color: inherit;">a0903153387@yahoo.com.tw</a> | |
</p> | |
<p style="margin-bottom: 0;"> | |
📱 <a href="tel:+1234567890" style="text-decoration: none; color: inherit;">0916-418068</a> | |
</p> | |
<p style="margin-bottom: 0; display: flex; align-items: center; justify-content: center;"> | |
<img src="https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png" alt="GitHub" style="width:16px; height:16px; margin-right: 5px;"> | |
<a href="https://github.com/3A732038" target="_blank" style="text-decoration: none; color: inherit;">github.com/3A732038</a> | |
</p> | |
</div> | |
""") | |
gr.Markdown(""" | |
關於我 | |
=== | |
熱衷於探索 AI 技術的軟體工程師,擅長 Python 和機器學習。 | |
熟悉各類開發工具與框架,並具備網站開發與資料庫使用經驗。喜歡將創新想法轉化為實際應用。 | |
""") | |
gr.Markdown(""" | |
技能 | |
=== | |
""") | |
with gr.Row(elem_classes="skills"): | |
for skill in ["Python", "深度學習", "Web 開發", "數據分析"]: | |
gr.Markdown(f"<div class='skill'>{skill}</div>") | |
with gr.Row(): | |
with gr.Column(scale=2): | |
gr.Markdown(""" | |
特殊經歷 | |
=== | |
""") | |
prove=['file/履歷資料/研討會證明.png',None,'file/履歷資料/專題名次.pdf'] | |
name=['ICIM2024研討會: 提交的研究成果被接受,並在研討會上進行了發表。','碩二下學期擔任指導教授所開的類神經網路課程助教。','大學專題實務成果展競賽亞軍,技術類業界評選第一名。'] | |
describe=['本研究基於研究所時期的成果,題為「基於情緒支持的對話:融合情緒感知和關鍵字識別的研究」。研究旨在通過聊天機器人為情緒困擾者提供陪伴,緩解其短期心理壓力。本文提出的模型結合情緒標籤和關鍵字識別技術,與其他基礎模型相比,能夠提供更精準的回復,從而更有效地支持用戶的情緒需求。<a href="file/履歷資料/巫宇哲_研討會.pdf" target="_blank">投稿內文連結</a>', | |
'主要協助老師指導學生實作部分。包括使用 WEKA 軟體教導學生快速構建和分析機器學習模型,並解釋模型結果的含義。後期則引導學生安裝 Python 環境,撰寫並執行機器學習模型的程式碼,幫助學生在未來能夠運用 AI 技術更有效地完成工作。' , | |
'<i>專題名稱:熱影像結合人臉偵測暨網頁瀏覽系統。</i></br>為因應新冠疫情,無接觸體溫檢測需求激增,本專題開發了利用紅外線熱影像和後端資料庫蒐集,最終實現異地閱覽和確保體溫監測的安全與效率。<a href="file/履歷資料/專題文件.pdf" target="_blank">專題內文連結</a></br></br><b>我的貢獻:硬體設備組裝、人臉偵測和後端資料庫及視覺化</b>' | |
] | |
for i in range(len(name)): | |
gr.HTML(f""" | |
<div style="margin-bottom: 10px;"> | |
<ui> | |
<li> | |
<p style="font-size: 1.3em; font-weight: bold;">{name[i]}</p> | |
<span style="font-size: 1.0em; font-weight: normal;"> | |
{render_html(prove[i])} | |
</span> | |
</li> | |
</ui> | |
</div> | |
 <strong>內容簡述:</strong> {describe[i]} | |
</br> | |
</br> | |
""") | |
with gr.Column(scale=1): | |
gr.HTML(''' | |
<div style="font-size: 32px; font-weight: bold; color: #2c3e50; margin: 0; padding: 0;"> | |
證照 | |
</div> | |
<hr style="border: none; border-top: 2px solid #2c3e50; margin: 1% 0;"> | |
''') | |
# Certificate table header | |
with gr.Row(elem_classes="cert-row cert-header"): | |
with gr.Column(scale=1, min_width=100): | |
gr.Markdown("### 證照名稱") | |
with gr.Column(scale=1, min_width=100): | |
gr.Markdown("### 證照機構") | |
with gr.Column(scale=2, min_width=200): | |
gr.Markdown("### 證照照片") | |
# Certificate data rows | |
certificates = [ | |
("電腦硬體裝修丙級", "勞動部", "履歷資料/硬體裝修丙級_mask.jpg"), | |
("電腦硬體裝修乙級", "勞動部", "履歷資料/硬體裝修乙級_mask.jpg"), | |
("Database Administration Fundamentals", "微軟", "履歷資料/DAF.jpg"), | |
("Software Development Fundamentals", "微軟", "履歷資料/SDF.jpg"), | |
("Networking Fundamentals", "微軟", "履歷資料/NF.png"), | |
("CRM Merchandise Analyst", "微析科技", "履歷資料/crm_mask.jpg"), | |
("Enterprise Resource Planning", "中華企業資源規劃學會", "履歷資料/erp.jpg"), | |
] | |
for cert_name, cert_org, cert_img in certificates: | |
with gr.Row(elem_classes="cert-row"): | |
with gr.Column(scale=1, min_width=100): | |
gr.Markdown(cert_name) | |
with gr.Column(scale=1, min_width=100): | |
gr.Markdown(cert_org) | |
with gr.Column(scale=2, min_width=200): | |
gr.Image(cert_img, height=100, show_label=False) | |
with gr.Tab("專案展示",elem_classes="content"): | |
with gr.Row(): | |
with gr.Column(scale=1): | |
gr.Markdown(""" | |
## 學生點名系統 | |
<strong>動機與目的:</strong> 鑒於每次上課點名都是老師的一大負擔,開發了這個學生點名系統,旨在幫助老師更有效地進行點名。本專案使用 Laravel 開源 PHP Web 框架開發,主要功能包括: | |
<div style="display: flex;"> | |
<div style="width: 20%;"> | |
<b>老師功能</b>: | |
</br> | |
- 查看課表及點名記錄</br> | |
- 查看學生出缺席和請假狀況</br> | |
- 審核學生請假申請 | |
</div> | |
<div style="width: 20%;"> | |
<b>學生功能:</b> | |
</br> | |
- 查看課表及進行點名</br> | |
- 查看出缺席和請假記錄</br> | |
- 申請請假 | |
</div> | |
</div> | |
</br> | |
下圖為學生點名系統的截圖: | |
""") | |
with gr.Row(): | |
with gr.Column(scale=1): | |
gr.Markdown("""老師主頁課表封面""") | |
gr.Image('履歷資料/網頁1.jpg',container=False)#container 決定是否外面有框框 | |
with gr.Column(scale=1): | |
gr.Markdown("""老師查看出缺席""") | |
gr.Image('履歷資料/網頁2.jpg',container=False) | |
gr.Markdown("""完整專案可參閱本github:<a href="https://github.com/WISD-2020/final02" target="_blank">學生點名系統專案</a>""") | |
gr.Markdown("""<hr style="border-top: 2px solid;border-color:#169bf2;">""") | |
gr.Markdown(""" | |
## 氣管插管預測 | |
<strong>動機與目的:</strong>為了協助醫生在執行插管時更精確地將氧氣管置入正確位置,我們利用影像分割技術(如 TransUnet、UNet++ 等)來實現該目標。最後,我們結合邊緣檢測與形態學技術,精確量化預測與實際的誤差,以提高插管的成功率並降低風險。 | |
該成果如下展示: | |
""") | |
#提交要的範例後顯示對應該範例氣管插管真實和預測位置 | |
def choice(input_idx,img): | |
if input_idx == "example_2": | |
return (gr.Image('履歷資料/EET_project/ex_2_pred.jpg', container=False,interactive=False,label='影像切割所預測出來的mask',visible=True,height=310), | |
gr.Image('履歷資料/EET_project/ex_2_label.jpg', container=False,interactive=False,label='真實氣管的mask位置',visible=True,height=310) | |
) | |
elif input_idx == "example_3": | |
return (gr.Image('履歷資料/EET_project/ex_3_pred.jpg', container=False,interactive=False,label='影像切割所預測出來的mask',visible=True,height=310), | |
gr.Image('履歷資料/EET_project/ex_3_label.jpg', container=False,interactive=False,label='真實氣管的mask位置',visible=True,height=310) | |
) | |
else: | |
return (gr.Image('履歷資料/EET_project/ex_1_pred.jpg', container=False,interactive=False,label='影像切割所預測出來的mask',visible=True,height=310), | |
gr.Image('履歷資料/EET_project/ex_1_label.jpg', container=False,interactive=False,label='真實氣管的mask位置',visible=True,height=310) | |
) | |
# 定義一個函數來根據 Dropdown 的選擇更新圖片 | |
def update_image(choice): | |
# 根據選擇返回對應的圖片 | |
if choice == "example_1": | |
return '履歷資料/EET_project/ex_1_init.jpg' | |
elif choice == "example_2": | |
return '履歷資料/EET_project/ex_2_init.jpg' | |
elif choice == "example_3": | |
return '履歷資料/EET_project/ex_3_init.jpg' | |
with gr.Row(): | |
with gr.Column(scale=1): | |
dropdown = gr.Dropdown(["example_1", "example_2", "example_3"], label="Endotracheal Tube資料", info="氣管X-ray影像", value="example_1", interactive=True) | |
image = gr.Image('履歷資料/EET_project/ex_1_init.jpg', container=False,interactive=False) | |
# 當 Dropdown 值改變時更新 Image | |
dropdown.change(fn=update_image, inputs=dropdown, outputs=image) | |
gr.Interface(choice | |
,inputs=[dropdown,image] | |
,outputs=[gr.Image(visible=False),gr.Image(visible=False)],allow_flagging='never') | |
gr.HTML("""成果文件檔案:<a href="file/履歷資料/EET_project/EET_doc.pdf" target="_blank">EET成果文件檔</a>  完整專案可參閱本github:<a href="https://github.com/3A732038/hw2_M11123020" target="_blank">EET專案</a>""") | |
gr.Markdown("""<hr style="border-top: 2px solid;border-color:#169bf2;">""") | |
gr.Markdown(""" | |
## 貨車車牌辨識 | |
<strong>動機與目的:</strong>為了提高貨車進出倉庫的效率,我們建立一個車牌辨識系統,該系統基於深度學習技術,主要透過yolo來偵測車牌位置,再透過OCR技術來識別車牌號碼,最後將車牌號碼與倉庫數據庫進行比對,以確保進出貨物的準確性。 | |
該成果如下影片展示: | |
""") | |
with gr.Row(): | |
with gr.Column(scale=1): | |
gr.Video('履歷資料/貨車車牌/video_0001.mp4',label='原始貨車影片') | |
with gr.Column(scale=1): | |
gr.Video('履歷資料/貨車車牌/video_0001_result.mkv',label='車牌辨識影片') | |
gr.HTML("""成果文件檔案:<a href="file/履歷資料/貨車車牌/貨車車牌_doc.pdf" target="_blank">貨車車牌成果文件檔</a>  完整專案可參閱本github:<a href="https://github.com/3A732038/hw3_M11123020" target="_blank">貨車車牌辨識專案</a>""") | |
gr.Markdown("""<hr style="border-top: 2px solid;border-color:#169bf2;">""") | |
gr.Markdown(""" | |
## 聊天機器人 | |
""") | |
gr.Markdown(""" | |
<strong>動機與目的:</strong>過去在研究語言模型時,尚未設計與機器人對話的專屬介面,因此這次實作了一個簡單的聊天機器人介面。該聊天機器人基於 Qwen 大型預訓練語言模型,這是一個多語言支持的模型,供使用者進行互動體驗。 | |
<br> | |
※ 注意:若畫面出現 error,請重新整理頁面! | |
""") | |
gr.ChatInterface( | |
chat, | |
chatbot=gr.Chatbot(avatar_images=avatar_images), | |
textbox=gr.Textbox(placeholder="輸入你的訊息...", elem_id="textbox"), | |
submit_btn='送出', | |
clear_btn='清除', | |
retry_btn='重新送出', | |
undo_btn=None | |
) | |
gr.Markdown("""<hr style="border-top: 2px solid;border-color:#169bf2;">""") | |
gr.HTML(f""" | |
<h2>其他專案</h2> | |
<h3> | |
<ul> <li>分類預測和回歸預測:</li> </ul> | |
</h3> | |
使用<a href="https://archive.ics.uci.edu/dataset/2/adult">成人資料集</a> 進行測試,針對收入(income)欄位進行分類預測,針對每週工時(hours-per-week)欄位進行回歸預測。我們應用了決策樹、隨機森林、支援向量機等機器學習演算法,並使用混淆矩陣、ROC 曲線、AUC 等指標來評估模型的表現。 | |
<h3> | |
<ul> <li>分群預測:</li> </ul> | |
</h3> | |
使用<a href="https://archive.ics.uci.edu/ml/datasets/iris">IRIS資料集</a>進行分群預測,採用了 K-means、DBSCAN 和層次聚類演算法。模型表現的評估則基於 purity 指標。 | |
<h3> | |
<ul> <li>關聯規則:</li> </ul> | |
</h3> | |
使用交易資料集進行關聯規則分析,採用了 Apriori 和 FP-Growth 演算法來找出產品之間的關聯,並以支持度與置信度來評估規則的強度。該完整內容如右:<a href="file/履歷資料/DM/DM_4.pdf" target="_blank">關聯規則文件檔案</a> | |
<h3> | |
<ul> <li>深度學習做分類和回歸預測:</li> </ul> | |
</h3> | |
與上述分類與回歸預測相似,使用 <a href="https://archive.ics.uci.edu/dataset/2/adult">成人資料集</a>作為測試,不同之處在於這次使用了自建的類神經網路進行預測,評估指標依然保持一致。 | |
<h3> | |
<ul> <li>降維:</li> </ul> | |
</h3> | |
應用了多維縮放(MDS)與 t-SNE 等降維技術,將高維資料降至二維並進行視覺化展示。同時,對於名目尺度資料,我們除了使用 one-hot encoding,還特別測試了 word embedding 技術。該完整內容如右:<a href="file/履歷資料/ML/ML_4.pdf" target="_blank">降維文件檔案</a> | |
""") | |
with gr.Tab("AI小助手",elem_classes="content"): | |
gr.Markdown(""" | |
## <div align='center' >AI履歷助手:巫宇哲的智能個人資料查詢</div> | |
<strong>主要用途:</strong>此語言模型運用檢索增強生成 (RAG) 技術,為巫宇哲的個人資訊提供客製化聊天服務。透過實時檢索相關資料,模型能夠準確且生成個性化回覆,無需額外訓練。 | |
特別適合在有新資料時,模型能即時更新知識,而無需反覆進行訓練,或是在無法進行大規模模型訓練的情境下使用。<br> | |
※ 注意:該模型提供的資訊僅供參考,可能存在誤差,請根據履歷資料和專案展示頁面加以判斷。若是出現模型回答不好的情況也可以按重新發送按鈕,讓模型在回答一次。 | |
""") | |
gr.ChatInterface( | |
resume_QA, | |
chatbot=gr.Chatbot(height=400, elem_classes="custom-chatbot",avatar_images=avatar_images), | |
textbox=gr.Textbox(placeholder="Ask me a yes or no question", container=False, scale=7), | |
examples=["自我介紹一下(請詳細介紹)","有參與過那些專案?", "有哪些證照或是技能?", "有什麼特殊經歷?","會使用python嗎?"], | |
cache_examples=True, | |
retry_btn="Retry", | |
undo_btn="Delete Previous", | |
clear_btn="Clear", | |
) | |
# gr.HTML(custom_footer) | |
resume_app.launch(allowed_paths=['./'],favicon_path='履歷資料/android-chrome-512x512.png') |