




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
人工智能綜合項目開發項目八車牌識別閘機控制系統模擬實驗成都職業技術學院項目分析01任務一車牌識別模型部署02任務二閘機控制系統構建03項目八
車牌識別閘機控制系統模擬實驗項目分析智慧停車場管理系統首先實現車牌數據采集;然后利用深度學習神經網絡算法進行
車牌檢測和車牌識別;然后根據識別結果對閘機進行控制,以及
LCD
屏幕顯示車牌識別
結果。學習神經網絡數學模型基本概念;學習損失函數、優化器的基本概念;掌握神經網絡模型訓練的基本流程;掌握使用神經網絡解決車牌識別問題的方法;掌握嵌入式系統開發基本流程。
1.車牌識別概述車牌識別系統是計算機視頻圖像識別技術在車輛牌照識別中的一種應用,能夠將運
動中的車輛牌照信息(包括漢字字符、英文字母、阿拉伯數字及號牌顏色)從復雜的背
景中提取并識別出來,通過車牌提取、圖像預處理、特征提取、車牌字符識別等技術,
識別車輛牌號、顏色等信息。目前對車牌的字母和數字的識別率均可達到
99%以上。根據應用條件和要求的不同,車牌識別產品也有多種類型。從實現模式來說,分為
軟識別和硬識別兩種。軟識別即車牌識別軟件,基本是安裝的
PC
端、服務器端,前端硬件設備采集視頻或
抓拍圖片,傳輸到后端帶有識別軟件識別端進行識別,這種技術多數應用在前期模擬相
機時代停車場,高速公路,電子警察,但這種方式對分析端要求較高,如中間傳輸出現
中斷或者后端出現重啟情況,就無法實時進行識別。特別是在一些小型場景,比如停車
場,加油站,新能源電動車充電站內,PC
在崗亭或者機房,經常由于溫度、潮濕等條件
影響,也會存在不穩定情況;另外在特定場景,由于天氣、復雜環境、角度影響,識別率遲遲達不到很高標準,所以軟識別已經很少使用。硬識別即前端實現視頻圖像采集處理,自動補光,自適應各種復雜環境,車輛號碼
自動識別并輸出一體化設備,這種模式采用嵌入式技術,把深度學習算法植入到專用攝
像機硬件中。具有運算速度快、器件體積小、穩定性強,自適應強等特點。當前,車牌識別技術已經廣泛應用于停車管理、稱重系統、靜態交通車輛管理、公
路治超、公路稽查、車輛調度、車輛檢測等各種場合,對于維護交通安全和城市治安,
防止交通堵塞,實現交通自動化管理有著現實的意義。車牌識別技術是智慧停車場系統中的重要組成部分。本次智慧停車場管理的第一個
任務就是車牌識別模型部署,如圖
8.0-1
所示的車牌識別系統開發流程圖中,獲取到車
牌圖像后就進行車牌識別模型部署任務。圖
8.0-1
車牌識別系統開發流程圖其中車牌識別模型部署主要分為三個步驟實現,首先提取出圖像中的車牌大致位置;
然后再利用透視變換和垂直精細繪圖提取出車牌的精確位置;最后利用
OCR(Optical
Character
Recognition)字符識別方法識別出車牌號并輸出。車牌提取詳細流程如圖
8.0-2
所示。圖
8.0-2
車牌提取詳細流程圖2.閘機控制系統概述實現車牌識別之后就可以確定是否放行然后控制道閘打開或者關閉。閘機控制系統
流程如圖
8.0-3
所示:圖
8.0-3
閘機控制系統流程圖閘機系統底層功能實現結構分析流程圖如圖
8.0-4
所示,識別到車牌信息后,通過
WiFi
通信協議將識別結果發送給智能節點核心控制板,智能節點核心控制板再通過串口
控制舵機執行器開啟,同時語音識別模塊自動播報閘機狀態及識別的車牌和車位數信息。
LCD
顯示屏將識別的車牌號和車位數量信息進行顯示。智能節點核心控制板再將底層實現
的功能數據通過
WiFi
通信協議上傳。圖
8.0-4
閘機系統底層功能實現結構分析流程圖任務一
車牌識別模型部署(1)車牌粗定位首先對車牌進行初步檢測定位,檢測出車牌的大致位置。對圖像進行一些插補和調
整圖像大小比例,然后核心的部分就是
cascade
級聯分類器的應用。這里的級聯分類器
是基于
Haar+Adaboost
構成的,也即
cascade.xml
文件,該文件存放了一些車牌的
Haar
特征。在這里我們采用了
cascade.xml
檢測模型,然后使用
OpenCV
的
detectMultiscale的方法來對圖像進行滑動窗口遍歷尋找車牌,實現車牌的粗定位。
#
實現車牌粗定位watch_cascade
=
cv2.CascadeClassifier("cascade.xml")
#
加載車牌檢測的級聯分類器#
獲取車牌粗定位區域。image_gray:灰度圖。def
detectPlateRough(watch_cascade,
image_gray,
resize_h=720,
en_scale=1.08,
top_bottom_padding_rate=0.05):if
top_bottom_padding_rate
>
0.2:print("error:top_bottom_padding_rate
>
0.2:",
top_bottom_padding_rate)exit(1)height
=
image_gray.shape[0]padding
=
int(height
*
top_bottom_padding_rate)scale
=
image_gray.shape[1]
/
float(image_gray.shape[0])image
=
cv2.resize(image_gray,
(int(scale*resize_h),
resize_h))image_color_cropped
=
image[padding:resize_h-padding,
0:image_gray.shape[1]]image_gray
=
cv2.cvtColor(image_color_cropped,
cv2.COLOR_RGB2GRAY)5#
滑動窗口遍歷尋找車牌watches
=
watch_cascade.detectMultiScale(image_gray,
en_scale,
2,
minSize=(36,
9),
maxSize=(36*40,
9*40))cropped_images
=
[]for
(x,
y,
w,
h)
in
watches:#
從圖形中剪裁車牌區域cropped_origin
=
cropped_from_image(image_color_cropped,
(int(x),
int(y),
int(w),
int(h)))x
-=
w
*
0.14w
+=
w
*
0.28y
-=
h
*
0.6h
+=
h
*
1.1
其中
detectMultiscale()函數為多尺度多目標檢測。多尺度通常搜索目標的模板尺
寸大小是固定的,但不同圖片大小不同,目標對象的大小也是不定的,因此多尺度即不
斷縮放圖片大小(縮放到與模板匹配),通過模板滑動窗函數搜索匹配。同一幅圖片可
能在不同尺度下都得到匹配值,所以多尺度檢測函數
detectMultiscale()是多尺度合并
的結果。因此
cascade.xml
這個文件是通過很多的正樣本車牌圖片和負樣本非車牌圖片轉換
的
cascade.xml
文件,其中的
Haar
特征數據已經過
Adaboost
處理。通過這個
xml
文件就
可以訓練出一個級聯分類器,該分類器的判別車牌標準是通過計算大量車牌特征后得出
的一個閾值,大于這個閾值判別為車牌,否則判別為非車牌,如圖
8.0-1
所示。通過該
方法就得到了圖像中車牌的粗定位。cropped
=
cropped_from_image(image_color_cropped,
(int(x),
int(y),
int(w),
int(h)))#
將找到的所有車牌存放入列表cropped_images.append([cropped,
[x,
y+padding,
w,
h],
cropped_origin])return
cropped_images
#
返回車牌位置圖
8.0-1
車牌檢測判定示意圖粗定位后的圖像如圖
8.0-2
所示:圖
8.0-2
車牌粗定位(2)車牌精定位對車牌進行粗定位后,再對車牌進行精定位。這里的精定位其實就是切掉原來粗定
位后車牌的多余部分,這里使用首先使用透視變換矯正車牌位置,然后調用
tflite
模型實現垂直精細繪圖方法輸出車牌精定位。使用
OpenCV
的
getPerspectiveTransform()和
warpPerspective()函數實現透視變換,矯正圖像中的車牌位置。#
透視變換實現車牌矯正def
findContoursAndDrawBoundingBox(image_rgb):line_upper
=
[]line_lower
=
[]line_experiment
=
[]gray_image
=
cv2.cvtColor(image_rgb,cv2.COLOR_BGR2GRAY)for
k
in
np.linspace(-50,
0,
15):binary_niblack
=
cv2.adaptiveThreshold(gray_image,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,17,k)
#
自適應閾值二值化contours,
hierarchy
=
cv2.findContours(binary_niblack.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)for
contour
in
contours:bdbox
=
cv2.boundingRect(contour)if
(bdbox[3]/float(bdbox[2])>0.7
and
bdbox[3]*bdbox[2]>100
and
bdbox[3]*bdbox[2]<1200)
line_upper.append([bdbox[0],bdbox[1]])
line_lower.append([bdbox[0]+bdbox[2],bdbox[1]+bdbox[3]])
line_experiment.append([bdbox[0],bdbox[1]])
line_experiment.append([bdbox[0]+bdbox[2],bdbox[1]+bdbox[3]])rgb
=
cv2.copyMakeBorder(image_rgb,30,30,0,0,cv2.BORDER_REPLICATE)
#
邊緣填充
leftyA,
rightyA
=
fitLine_ransac(np.array(line_lower),
3)leftyB,
rightyB
=
fitLine_ransac(np.array(line_upper),
-3)or
(bdbox[3]/float(bdbox[2])>3
and
bdbox[3]*bdbox[2]<100):rows,cols
=
rgb.shape[:2]pts_map1
=
np.float32([[cols
-
1,
rightyA],
[0,
leftyA],
[cols
-
1,
rightyB],
[0,
leftyB]])pts_map2
=
np.float32([[136,36],[0,36],[136,0],[0,0]])mat
=
cv2.getPerspectiveTransform(pts_map1,pts_map2)
#
透視變換image
=
cv2.warpPerspective(rgb,mat,(136,
36),flags=cv2.INTER_CUBIC)
#
透視變換image,
M
=
fastDeskew(image)
#
圖像矯正return
image
#
返回矯正后的圖像矯正后的圖像如圖
8.0-3
所示:圖
8.0-3
車牌矯正調用
tflite
模型實現垂直精細繪圖方法輸出車牌精定位。#
加載
tflite
模型class
TfliteRun:def
init
(self,
model_name="model12",
model_path=POSENET_MODEL):"""model_name:
模型名稱model_path:
模型路徑"""erpreter
=
tflite.Interpreter(model_path=model_path)
#
讀取模型self.interpreter.allocate_tensors()
self.model_name
=
model_name#
分配張量#
獲取輸入層和輸出層維度self.input_details
=
erpreter.get_input_details()
self.output_details
=
erpreter.get_output_details()#
實現模型推理
def
inference(self,
img):input_data
=
img
self.interpreter.set_tensor(self.input_details[0]['index'],
input_data)
erpreter.invoke()
#
模型推理output_data1
=
erpreter.get_tensor(self.output_details[0]['index'])
#
獲取輸出層數據
return
output_data1#
模型推理class
model12Rec(object):def
init
(self,
model_path=L12REC_PATH):self.tflite_run
=
TfliteRun(model_path=model_path)
#
加載
tflite
模型
def
imgPreprocessing(self,
img):resized
=
cv2.resize(img,
(66,
16))
resized
=
resized.astype(np.float32)
/
255
resized
=
resized[np.newaxis,
:]return
resized
def
inference(self,
img):img
=
self.imgPreprocessing(img)
#
圖片預處理
return
self.tflite_run.inference(img)[0]
#
模型推理#
定義垂直精細繪圖函數def
finemappingVertical(res,
image):
print("keras_predict",
res)res
=
res*image.shape[1]
res
=
res.astype(16)
H,T
=
res
H
-=
3if
H
<
0:
H
=
0T
+=
2if
T
>=
image.shape[1]-1:
T
=
image.shape[1]-1image
=
image[0:35,
H:T+2]image
=
cv2.resize(image,
(int(136),
int(36)))
return
image
#
返回車牌精定位圖片model12_rec
=
model12Rec("model12.tflite")plate
=
finemappingVertical(self.model12_rec.inference(plate),
plate)
#
輸入矯正后的車牌,調用模型實現垂直精細繪圖,輸出車牌精定位。精定位后的圖像如圖
8.0-4
所示:圖
8.0-4
車牌精定位(3)車牌識別實現確定好車牌的位置后,對該車牌字符信息進行識別,最終輸出車牌號。車牌字符信
息識別采用
OCR
字符識別技術,也就是在不分割字符的前提下能夠識別出車牌一共七個
字符。傳統的車牌字符識別就是先分割字符然后再逐一使用分類算法進行識別。不分割
字符直接識別方式的優點就是僅需要較少的字符樣本即可用于分類器的訓練。目前大多
數商業車牌識別軟件采用的就是這種方法。如果在某些惡劣的自然情況下,車牌字符的
分割和識別就變得尤其困難,傳統的方法并不能取得很好的結果,這時候也可以采用整
體識別方式。通常車牌由七個字符組成,就可以采用多標簽分類的方法直接輸出多個標
簽,如圖
8.0-5
所示:
圖
8.0-5
車牌識別多標簽分類輸出示例輸入車牌精定位圖片,加載
OCR
字符識別模型返回字符識別結果。import
onnxruntime
as
ort#
加載
ONNX
模型,識別字符
class
OnnxRun:def
init
(self,
model_name="ocr_rec",
model_path="ocr_rec.onnx"):
"""model_name:
模型名稱
model_path:
模型路徑
"""self.model_name
=
model_nameself.ort_session
=
ort.InferenceSession(model_path)
self.input_name
=
self.ort_session.get_inputs()[0].name
input
=
self.ort_session.get_inputs()output
=
self.ort_session.get_outputs()#
模型推理
def
inference(self,
img):input_data
=
imgreturn
self.ort_session.run(None,
{self.input_name:
input_data})加載字符標簽文件解析
OCR
字符識別模型推理結果,輸出車牌字符。
class
ProcessPred(object):#
獲取字符識別標簽文件def
init
(self,
character_dict_path=None,
character_type='ch',
use_space_char=False):
self.character_str
=
''with
open(character_dict_path,
'rb')
as
fin:
lines
=
fin.readlines()for
line
in
lines:line
=
line.decode('utf-8').strip('\n').strip('\r\n')self.character_str
+=
lineif
use_space_char:self.character_str
+=
'
'dict_character
=
list(self.character_str)dict_character
=
self.add_special_char(dict_character)self.dict
=
{}for
i,
char
in
enumerate(dict_character):self.dict[char]
=
iself.character
=
dict_characterdef
add_special_char(self,
dict_character):dict_character
=
['blank']
+
dict_characterreturn
dict_character最后返回車牌識別結果,如圖
8.0-6
所示:圖
8.0-6
車牌識別結果任務二
閘機控制系統構建1.系統硬件模塊在閘機系統中,采用了智能節點核心控制板、舵機執行器、LCD
顯示屏、語音識別模塊攝像頭等硬件模塊。1)智能節點核心控制板:主要實現與項目軟件部分進行通信,獲取車牌識別結果并將閘機狀態上傳,同時通
過串口控制舵機執行器開關,控制
LCD
顯示屏顯示車牌號等功能。2)舵機執行器:舵機是一種位置(角度)伺服的驅動器,適用于一些需要角度不斷變化并可以保持
的控制系統。舵機實際上是一種俗稱,其是一種伺服馬達。舵機
SG90
有三根線控制。暗灰色線為
GND,地線;紅色線為
VCC,電源線,工作電壓
為
4.8~7.2V,通常情況下使用+5V
做電源電壓;橙黃色線為控制線,通過該線輸入脈沖
信號,從而控制舵機轉動,其轉動角度為
180°。3)LCD
顯示屏:TFT-LCD
即薄膜晶體管液晶顯示器。主要實現車牌號和車位數顯示功能。2.基于車牌識別的道閘控制系統
1)車牌識別功能插件構建實現第一個功能插件,車牌圖像獲取功能插件。調用攝像頭獲取車牌圖像,獲取車
牌識別結果消息隊列,并調用函數實現車牌識別結果繪制。class
VideoThread(threading.Thread):def
init
(self,
camera="0",
q_flask:Queue=None,q_img:Queue=None,
q_rec:Queue=None,
q_send=None,
full_dict=None):
threading.Thread.
init
(self)self.cap
=
setCamera(camera)
#
網絡攝像頭
self.q_flask
=
q_flaskself.full_dict
=
full_dictself.embd_drive
=
EmbdDrive(q_send=q_send)def
run(self):
pricet
=
[]
while
True:if
self.cap
!=
"":ret,
frame
=
self.cap.read()#
調用攝像頭,獲取車牌圖像幀frame
=
cv2.resize(frame,
(ai_cfg.CAM_WIDTH,
ai_cfg.CAM_HEIGHT))self.q_img
=
q_img
self.q_rec
=
q_rec#
消息隊列傳遞原始圖像到識別插件
#
消息隊列傳遞
AI
模型的推理結果#
原始圖像傳遞if
not
self.q_img.full()
and
not
frame
is
None:self.q_img.put(bytearray(frame))if
not
self.q_rec.empty():pricet
=
self.q_rec.get()
#
獲取車牌識別結果消息隊列frame,
lpr_strs
=
recImgDis(frame,
pricet)
#
車牌識別結果繪制self.embd_drive.gatePlate(lpr_strs[0])self.full_dict[config.PLATE_STR]
=
lpr_strs[0]log.info(lpr_strs)#
傳遞結果繪制圖像if
not
self.q_flask.full()
and
not
frame
is
None:self.q_flask.put(bytearray(frame))2)車牌識別模型推理功能插件實現。獲取待識別車牌圖像,調用車牌識別函數實現車牌識別,并將識別結果傳遞到消息隊列。class
FaceMaskRecThread(threading.Thread):def
init
(self,
q_img:Queue=None,
q_rec:Queue=None):threading.Thread.
init
(self)self.q_img
=
q_img
self.q_rec
=
q_rec#
消息隊列傳遞原始圖像到識別插件
#
消息隊列傳遞
AI
模型的推理結果self.face_detect_rec
=
LicensePlateRec(detect_path=ai_cfg.PLATE_DETECT_PATH,
ocr_rec_path=ai_cfg.PLATE_OCR_PATH,
ocr_keys_path=ai_cfg.OCR_KEYS_PATH,
l12_path=ai_cfg.L12REC_PATH)def
run(self):while
True:if
self.q_img.empty():continueelse:image
=
self.q_img.get()
#
獲取當前圖片幀if
image
!=
False:image
=
np.array(image).reshape(ai_cfg.CAM_HEIGHT,
ai_cfg.CAM_WIDTH,
3)else:breakface_detect_pricet
=
self.face_detect_rec.inference(image)
#
調用車牌識別模型推理函數if
self.q_rec.full():continueelse:self.q_rec.put(face_detect_pricet)
#
傳遞識別結果
q_rec
消息隊列然后定義車牌識別模型推理函數,輸入待識別車輛圖像,然后調用車牌檢測級聯分類器模型提取車牌圖像,再對提取出的車牌圖像進行矯正和精提取,最后調用
OCR
字符識別模型和字符標簽文件輸出車牌號。class
LicensePlateRec(object):def
init
(self,
detect_path=PLATE_DETECT_PATH,
#
車牌檢測級聯分類器ocr_rec_path=PLATE_OCR_PATH,#
OCR
字符識別模型ocr_keys_path=OCR_KEYS_PATH,#
字符標簽文件l12_path
=
L12REC_PATH):
#
加載車牌檢測的級聯分類器#
車牌精定位模型self.watch_cascade
=
cv2.CascadeClassifier(detect_path)
self.model12_rec
=
model12Rec(l12_path)self.onnx_run
=
OnnxRun(model_path=ocr_rec_path)
self.postprocess_op
=
ProcessPred(ocr_keys_path,
'ch',
True)
self.predictions
=
[]#
輸入數據預處理函數
def
imgPreprocessing(self,
img):h,
w
=
img.shape[:2]
max_wh_ratio
=
w
*
1.0
/
himgC,
imgH,
imgW
=
[int(v)
for
v
in
"3,
32,
100".split(",")]assert
imgC
==
img.shape[2]
imgW
=
int((32
*
max_wh_ratio))
h,
w
=
img.shape[:2]ratio
=
w
/
float(h)
if
math.ceil(imgH
*
ratio)
>
imgW:resized_w
=
imgW
else:resized_w
=
int(math.ceil(imgH
*
ratio))resized_image
=
cv2.resize(img,
(resized_w,
imgH)).astype('float32')
resized_image
=
resized_image.transpose((2,
0,
1))
/
255resized_image
-=
0.5
resized_image
/=
0.5padding_im
=
np.zeros((imgC,
imgH,
imgW),
dtype=np.float32)padding_im[:,
:,
0:resized_w]
=
resized_image
padding_im
=
padding_im[np.newaxis,
:]return
padding_im
#
車牌識別
def
inference(self,
img):lpr_strs
=
[]
boxs
=
[]#
車牌區域提取images
=
detectPlateRough(self.watch_cascade,
img,
img.shape[0],
top_bottom_padding_rate=0.1)for
i,
plate
in
enumerate(images):plate,
rect,
origin_plate
=
plate
#
邊距填充后的車牌、車牌坐標、原始車牌圖片
plate
=
cv2.resize(plate,
(136,
36
*
2))plate
=
findContoursAndDrawBoundingBox(plate)
#
車牌位置字符較正plate
=
finemappingVertical(self.model12_rec.inference(plate),
plate)
#
垂直精細繪圖
plate
=
finemappingVertical(self.model12_rec.inference(plate),
plate)
#
垂直精細繪圖
input_data
=
self.imgPreprocessing(plate)
#
輸入數據預處理ocr_rec
=
self.onnx_run.inference(input_data)
#
字符識別模型推理#
調用字符標簽文件解析車牌字符識別模型輸出結果
lpr_str
=
self.postprocess_op(ocr_rec[0])[0]boxs.append(rect)
#
獲取車牌位置lpr_strs.append(lpr_str[0])
#
獲取車牌識別結果self.predictions
=
[lpr_strs,
boxs]
#
返回車牌號和車牌位置
return
self.predictions識別到車牌后,將識別結果傳遞到
q_rec
識別結果消息隊列,車牌圖像獲取線程就
會對識別結果進行繪制。根據返回的車牌位置坐標,利用
OpenCV
繪制出矩形框將車牌框
選出,再將車牌號顯示到矩形框上方,從而實現車牌識別結果的可視化顯示。
#
繪制識別結果def
recImgDis(img,
process_pred,
font_path=False):lpr_strs
=
[]if
process_pred:lpr_strs,
boxs
=
process_predfor
i,
rect
in
enumerate(boxs):cv2.rectangle(img,
(int(rect[0]),
int(rect[1])),(int(rect[0]
+
rect[2]),
int(rect[1]
+
rect[3])),(0,
0,
255),
2,
cv2.LINE_AA)cv2.rectangle(img,
(int(rect[0]
-
1),
int(rect[1])
-
16),(int(rect[0]
+
115
+
50),
int(rect[1])),(0,
0,
255),
-1,
cv2.LINE_AA)if
font_path:img
=
putText(img,
str(lpr_strs[i]),org=(int(rect[0]+1),
int(rect[1]-16)),font_path=FONT_PATH)else:img
=
putText(img,
str(lpr_strs[i]),
org=(int(rect[0]+1),
int(rect[1]-16)))if
not
lpr_strs:
識別效果如圖
8.11
所示:圖
8.11
車牌識別任務(2)道閘控制系統功能插件構建最后實現嵌入式設備數據傳遞插件,將車牌識別結果以及閘機控制指令傳遞給閘機
控制系統。識別到車牌后不能直接將字符識別結果傳遞到道閘控制系統,需要將字符識別結果
進行轉換后再發送給道閘控制系統。
lpr_strs.append("")return
img,
lpr_strs#
嵌入式系統控制指令轉換def
gatePlate(self,
plt="京
1_+23)(456"):#
清除字母數字之外的所有字符
plate
=
re.sub("\W",
"",
plt)plate
=
re.sub("_",
"",
plate)
try:if
len(plate)
<
7:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2015年全國高中數學聯合競賽一試解答(A卷)
- 品牌家具加盟合同協議
- 悉尼車位出租合同協議
- 售電公司售電合同協議
- 咨詢費置換股權合同協議
- 商務汽車合同協議
- 戀愛同伙協議書范本
- 商品出口購貨協議書范本
- 快銷品銷售合同代理協議
- 微信工作協議解除合同
- 甘肅酒泉事業單位考試筆試含答案2024
- 七下生物考試試卷及答案
- 082023年青島西海岸新區中考自主招生化學模擬題
- 2024年3月濟南市2024屆高三模擬考試(一模)英語試卷(含答案)
- 第五章 TIA博途軟件及使用
- 全國廣播電視技術能手調頻與電視廣播組題庫
- 2023年江蘇省常州市統招專升本管理學自考真題(含答案)
- 新人教版八下英語過去式過去分詞表格
- cimatron紫藤教程系列gpp2由零開始
- 公安機關業務技術用房建設標準
- CAT3606 中文說明書-3600基礎
評論
0/150
提交評論