Keras判斷人民幣識別測試準確率

2021-10-07 15:42:02 字數 3843 閱讀 5453

本文只是在大佬的基礎上進行了一些額外的工作。大佬的**寫的很清楚。主要三個部分**鏈結如下     

keras進行人民幣面額識別(一): 

keras進行人民幣面額識別(二):

keras進行人民幣面額識別(三):

以上的**都是可以執行的。

# -*- coding: utf-8 -*-

import os

#對檔案重新命名便於生成csv檔案

#設定檔案路徑

path='c:/users/pc/desktop/a/public_test_data/test/test'

i=1#對目錄下的檔案進行遍歷

for file in os.listdir(path):

#判斷是否是檔案

if os.path.isfile(os.path.join(path,file))==true:

#設定新檔名

#重新命名

os.rename(os.path.join(path,file),os.path.join(path,new_name))

i+=1

#結束print ("end")

更改完成後效果圖如下:

#呼叫模型識別驗證集以及測試集

#testgen_dir = 'c:/users/pc/desktop/a/public_test_data/test'

testgen_dir = 'c:/users/pc/desktop/a/val_label'

#測試集目錄

fin_list = [0.1,0.2,0.5,1,2,5,10,50,100]

#相應標籤對應的人民幣面

dictionary =

#採用合理的名字給檔案進行命名

def get_result(directory):

file = open('val_data.csv','w')

file.write('name,label\n')

end = false # 相當於乙個開關,當ture的時候程式結束

i = 0 #記錄測試的數目

#建立生成器

test_datagen = imagedatagenerator(

rescale=1. / 255 #歸一化

)test_generator = test_datagen.flow_from_directory(

directory=directory, #位址

target_size=(150, 150),#縮放大小

shuffle=false,#是否打亂順序

batch_size=1,#一批次的數量

class_mode=none

)print(test_generator.filenames) # 按順序輸出檔案的名字

sample = (len(test_generator.classes)) #檔案總數目

print(sample)

model = load_model('face_value.h5')#載入訓練好的模型

#for img_np_list,label_list in test_generator:

for img_np_list in test_generator:

#得到特徵和標籤,這裡的標籤其實是資料夾名稱,在這裡沒有意義

file_list = test_generator.filenames

#按照順序獲得所有的名字(按資料夾順序)

pre_result_list = model.predict(img_np_list)

#輸入特徵,得出結果

if end == true:

break

for pre_result in pre_result_list:

result_list = pre_result.tolist() #將得到的結果轉換為列表形式

label = fin_list[result_list.index(max(result_list))]

#獲得對應的面值

try:

##file.writelines('{},{}\n'.format(file_list[i][-12:],label))

file.writelines('{},{}\n'.format(file_list[i][+5:], label))

#將得到的結果寫入csv檔案

i += 1

process = (i/sample) * 100

process = '進度:'.format(process)

print('的識別結果為:%'.format(file_list[i][+5:],label,process))

#列印資訊

# if (i > sample):

# end = true

# break

except indexerror:

end = true

break

print('程式結束,共識別%d個。' %sample)

get_result(testgen_dir)

識別完成後我們需要將這兩個csv檔案進行匹配,然後計算模型識別的準確率,**如下:

#對測試集手動打標籤時在新的csv檔案裡生成檔名

import csv

import os

# 1. 建立檔案物件

f = open('c:/users/pc/desktop/a/train_label.csv','w',encoding='utf-8')

# 2. 基於檔案物件構建 csv寫入物件

csv_writer = csv.writer(f)

# 3. 構建列表頭

csv_writer.writerow(["name"])

data=

path="c:/users/pc/desktop/a/public_test_data/test/test" #待讀取的資料夾

path_list=os.listdir(path)

path_list.sort()

path_list.sort(key=lambda x:int(x[:-4]))

number=len(path_list)

for i in range(number):

imgname=path_list[i]

#先給data賦值

with open('c:/users/pc/desktop/a/label.csv','r') as csvfile: #此處的csv是源表,即想要寫入的表

rows = csv.reader(csvfile)

with open('c:/users/pc/desktop/a/train_label.csv','w',newline='') as f: #這裡的csv則是最後輸出得到的新錶

writer = csv.writer(f)

i = 0

for row in rows:

print(i)

i = i + 1

writer.writerow(row)

# 5. 關閉檔案

f.close()

人民幣支付

描述 輸入一指定金額 以元為單位 然後輸出支付該金額的各種面額的人民幣數量,顯示100 元,50 元,20 元,10元,5 元,1元各多少張,盡量使用大面額。輸入 輸入乙個小於 1000 的正整數。輸出 分行輸出,每行顯示乙個整數,從上到下分別表示 100元,50元,20元,10元,5元,1元人民幣...

人民幣問題

時間限制 1 sec 記憶體限制 128 mb 提交 180 解決 129 統計給出任意的人民幣 100 100 元 求兌換成5元 2元和1元幣值 要求三種幣值均有 的方法有多少種。輸入任意的人民幣 100 100 元 的整幣。計算出兌換成5元 2元和1元幣值 要求三種幣值均有 的方法有多少種。10...

人民幣轉換

考試題目和要點 1 中文大寫金額數字前應標明 人民幣 字樣。中文大寫金額數字應用壹 貳 叄 肆 伍 陸 柒 捌 玖 拾 佰 仟 萬 億 元 角 分 零 整等字樣填寫。30分 2 中文大寫金額數字到 元 為止的,在 元 之後,應寫 整字,如 532.00應寫成 人民幣伍佰叄拾貳元整 在 角 和 分 後...