亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

基于Django圖像識(shí)別的智能垃圾分類(lèi)系統(tǒng)設(shè)計(jì)與部署實(shí)戰(zhàn)

基于Django圖像識(shí)別的智能垃圾分類(lèi)系統(tǒng)設(shè)計(jì)與部署實(shí)戰(zhàn) 我家樓下的垃圾分類(lèi)督導(dǎo)員阿姨盯了我半分鐘就因?yàn)槲遗e著一個(gè)沾了油污的外賣(mài)盒不知道該往哪個(gè)桶里扔。那一刻我意識(shí)到垃圾分類(lèi)這事兒看著簡(jiǎn)單真到手里全是知識(shí)盲區(qū)。后來(lái)我干脆寫(xiě)了個(gè)基于 Django 圖像識(shí)別的智能垃圾分類(lèi)系統(tǒng)用手機(jī)拍張照片傳到網(wǎng)頁(yè)上后端模型判斷出這是可回收物還是廚余垃圾連置信度和投放建議一起返回。這篇文章就把整個(gè)設(shè)計(jì)與實(shí)現(xiàn)過(guò)程拆開(kāi)來(lái)講技術(shù)選型的理由、模型怎么訓(xùn)練、Django 里怎么封裝推理邏輯、ORM 怎么查詢(xún)和刪除記錄再疊加部署排坑的實(shí)操經(jīng)驗(yàn)。適合正在做 Django 項(xiàng)目實(shí)戰(zhàn)的新手也適合想把深度學(xué)習(xí)模型接進(jìn) Web 系統(tǒng)、但還沒(méi)找到完整路徑的同學(xué)。1. 項(xiàng)目起點(diǎn)與選型思路這套系統(tǒng)解決了誰(shuí)的痛點(diǎn)動(dòng)手之前我認(rèn)真想了一下這套系統(tǒng)到底要給誰(shuí)用、解決什么問(wèn)題、以及為什么要用 Django 而不是更輕的框架。很多畢設(shè)開(kāi)始得很倉(cāng)促上來(lái)就找數(shù)據(jù)集、跑模型Web 端隨便選個(gè)框架寫(xiě)個(gè)上傳頁(yè)面最后再拼裝起來(lái)。結(jié)果模型精度挺高接口卻慢得沒(méi)法看數(shù)據(jù)庫(kù)表也拍腦袋設(shè)計(jì)演示的時(shí)候翻車(chē)。所以這個(gè)項(xiàng)目的第一步不是寫(xiě)代碼而是把需求邊界劃清楚。1.1 需求本質(zhì)不是“識(shí)別垃圾”而是“幫人做投放決策”垃圾分類(lèi)的難點(diǎn)不在“認(rèn)識(shí)物品”而在“歸類(lèi)到對(duì)應(yīng)垃圾桶”。比如一個(gè)礦泉水瓶是可回收物但你要是往里面扔了半瓶剩奶茶嚴(yán)格說(shuō)它屬于污損塑料投放邏輯就變了。系統(tǒng)里我設(shè)計(jì)了兩個(gè)層級(jí)圖像識(shí)別模型先輸出細(xì)分類(lèi)比如“塑料瓶”“紙板箱”“香蕉皮”“廢電池”等具體類(lèi)別然后由一份映射表將細(xì)分類(lèi)歸入四分類(lèi)體系可回收物、廚余垃圾、有害垃圾、其他垃圾。這套設(shè)計(jì)的價(jià)值在于前端展示時(shí)用戶(hù)看到的是“這是塑料瓶可回收物置信度 92%”而不是冷冰冰的“Class 7”。細(xì)分類(lèi)也方便以后擴(kuò)展——比如統(tǒng)計(jì)哪種垃圾識(shí)別錯(cuò)誤率最高再針對(duì)性補(bǔ)充訓(xùn)練數(shù)據(jù)。1.2 為什么選擇 Django 而不是 Flask 或 FastAPI圖像識(shí)別模型通常用 Python 生態(tài)訓(xùn)練Web 端也必須用 Python 才能把模型加載和業(yè)務(wù)邏輯放進(jìn)同一個(gè)進(jìn)程里這時(shí)候 Django 和 Flask 之間需要做個(gè)取舍。我最終選了 Django原因很實(shí)際自帶 Admin 后臺(tái)和 ORM能快速搭建記錄查詢(xún)、用戶(hù)管理、數(shù)據(jù)統(tǒng)計(jì)頁(yè)面不用重復(fù)造輪子模板系統(tǒng)加上 Django REST Framework 可以同時(shí)支持服務(wù)端渲染和純 API 兩種交互模式后期改成小程序端也方便項(xiàng)目結(jié)構(gòu)強(qiáng)制按 app 劃分模型推理、垃圾識(shí)別、用戶(hù)臺(tái)賬可以拆得比較干凈符合課程設(shè)計(jì)和工程化的評(píng)分要求生態(tài)成熟資料多遇到問(wèn)題搜索“django 執(zhí)行查詢(xún) 刪除對(duì)象”“django 創(chuàng)建 app”這類(lèi)關(guān)鍵詞能找到大量已踩坑記錄。當(dāng)然如果你的目標(biāo)是極致的并發(fā)性能FastAPI 的異步特性確實(shí)更有優(yōu)勢(shì)但在這個(gè)場(chǎng)景里模型推理本身是 CPU 重負(fù)載任務(wù)Web 框架的差異遠(yuǎn)小于推理耗時(shí)的差異。為了讓前后端職責(zé)清晰我可以用 Django 提供 API配合前端頁(yè)面調(diào)用這也是后面會(huì)講到的方案。1.3 圖像識(shí)別方案自己訓(xùn)練 CNN 還是遷移學(xué)習(xí)圖像識(shí)別這塊新手常見(jiàn)的誤區(qū)是一上來(lái)就搭建一個(gè) 10 層左右的 CNN用幾百?gòu)垐D跑幾十個(gè) epoch然后發(fā)現(xiàn)準(zhǔn)確率上不去。實(shí)際上在中小規(guī)模數(shù)據(jù)集上自己做訓(xùn)練很難趕上成熟的預(yù)訓(xùn)練模型。我采用遷移學(xué)習(xí)方案以 MobileNetV2 的預(yù)訓(xùn)練權(quán)重作為特征提取器替換最后的全連接分類(lèi)層在垃圾分類(lèi)數(shù)據(jù)集上做微調(diào)。MobileNetV2 的優(yōu)勢(shì)是模型體積小、推理速度快CPU 環(huán)境也能跑到幾十毫秒到幾百毫秒。在畢設(shè)演示場(chǎng)景里用戶(hù)上傳圖片后等 2 秒是可以接受的但模型文件超過(guò) 500MB 就不太體面了。EfficientNet 在同樣精度下也不差但轉(zhuǎn)換和部署時(shí)對(duì) tf 版本兼容性的要求更嚴(yán)格。為了穩(wěn)我選了 MobileNetV2實(shí)測(cè)下來(lái) Top-1 準(zhǔn)確率在 90% 左右已經(jīng)足夠支撐演示和日常自測(cè)。1.4 整體模塊劃分系統(tǒng)整體分為三個(gè)大的功能域項(xiàng)目里對(duì)應(yīng)三個(gè) Django appgarbageImage或者叫common負(fù)責(zé)圖像上傳、預(yù)處理、調(diào)用模型、返回識(shí)別結(jié)果records負(fù)責(zé)識(shí)別歷史記錄的新增、查詢(xún)、刪除、導(dǎo)出對(duì)應(yīng) ORM 操作部分users負(fù)責(zé)用戶(hù)登錄注冊(cè)和權(quán)限控制識(shí)別記錄需要關(guān)聯(lián)到當(dāng)前用戶(hù)避免互相看到對(duì)方數(shù)據(jù)。數(shù)據(jù)庫(kù)層面識(shí)別記錄表是核心。每個(gè)記錄保存原始圖片、模型輸出的細(xì)分類(lèi)標(biāo)簽、映射后的四分類(lèi)類(lèi)別、置信度、創(chuàng)建時(shí)間。這樣一個(gè)表就把整個(gè)業(yè)務(wù)閉環(huán)串起來(lái)了用戶(hù)上傳圖片系統(tǒng)返回結(jié)果結(jié)果寫(xiě)入數(shù)據(jù)庫(kù)用戶(hù)可以在歷史記錄頁(yè)查詢(xún)或刪除。2. 圖像識(shí)別模型訓(xùn)練數(shù)據(jù)集處理、遷移學(xué)習(xí)與導(dǎo)出的坑很多人做這類(lèi)項(xiàng)目時(shí)間花在寫(xiě) Web 頁(yè)面上模型處只用了官方示例權(quán)重甚至隨機(jī)初始化權(quán)重導(dǎo)致識(shí)別效果像抽盲盒。我來(lái)把模型訓(xùn)練這一環(huán)的關(guān)鍵操作拆開(kāi)這部分是識(shí)別系統(tǒng)好用與否的地基。2.1 數(shù)據(jù)集怎么找、怎么清洗公開(kāi)的垃圾分類(lèi)數(shù)據(jù)集有不少我用的是一份覆蓋幾十個(gè)細(xì)分類(lèi)的數(shù)據(jù)集圖片數(shù)量在幾萬(wàn)張量級(jí)。如果你沒(méi)有現(xiàn)成數(shù)據(jù)集也可以找 TrashNet 這類(lèi)公開(kāi)垃圾分類(lèi)數(shù)據(jù)集作為底座再補(bǔ)充一些手機(jī)拍攝的實(shí)物圖。數(shù)據(jù)集處理需要注意三個(gè)點(diǎn)清除無(wú)效圖片下載下來(lái)的壓縮包里經(jīng)常出現(xiàn)損壞的、尺寸為 0 的文件訓(xùn)練前統(tǒng)一檢查按類(lèi)別平衡樣本量類(lèi)別之間數(shù)量差距過(guò)大會(huì)導(dǎo)致模型對(duì)大類(lèi)別有偏向建議每個(gè)類(lèi)別至少保留 200 張以上不足的部分靠數(shù)據(jù)增強(qiáng)補(bǔ)足統(tǒng)一預(yù)處理邏輯訓(xùn)練時(shí)圖片被縮放到224x224推理時(shí)也必須走完全一樣的縮放和歸一化流程前后不一致是“訓(xùn)練挺好、上線拉胯”的頭號(hào)原因。2.2 遷移學(xué)習(xí)的具體做法模型結(jié)構(gòu)我用的是 TensorFlow/Keras 的 MobileNetV2 預(yù)訓(xùn)練版本把include_topFalse去掉自帶的分類(lèi)層然后接一個(gè)GlobalAveragePooling2D再加一個(gè)Dropout最后接Dense分類(lèi)層。這里為什么要用GlobalAveragePooling2D而不是直接Flatten因?yàn)?MobileNetV2 輸出特征圖是7x7x1280直接 Flatten 會(huì)產(chǎn)生 6 萬(wàn)多個(gè)參數(shù)不僅容易過(guò)擬合還讓模型變大。而全局平均池化把每個(gè)通道壓縮成一個(gè)數(shù)值參數(shù)量小得多效果反而更穩(wěn)這也是遷移學(xué)習(xí)實(shí)踐中的常見(jiàn)做法。代碼大致是這樣from tensorflow.keras.applications import MobileNetV2 from tensorflow.keras import layers, models base_model MobileNetV2( weightsimagenet, include_topFalse, input_shape(224, 224, 3) ) base_model.trainable False model models.Sequential([ base_model, layers.GlobalAveragePooling2D(), layers.Dropout(0.3), layers.Dense(len(class_names), activationsoftmax) ]) model.compile( optimizeradam, losscategorical_crossentropy, metrics[accuracy] )第一步先凍結(jié)底層只訓(xùn)練新加的分類(lèi)頭等分類(lèi)頭收斂后再把base_model的后面十幾層解凍用很小的學(xué)習(xí)率微調(diào)。這樣既保留底層通用的紋理與形狀特征又能讓高層特征更貼合垃圾圖片的細(xì)節(jié)差異。2.3 訓(xùn)練參數(shù)與精度實(shí)測(cè)訓(xùn)練腳本里我用ImageDataGenerator做數(shù)據(jù)增強(qiáng)包括隨機(jī)旋轉(zhuǎn)、翻轉(zhuǎn)、縮放、亮度調(diào)整增強(qiáng)后的圖片按8:2劃分訓(xùn)練集和驗(yàn)證集。推薦參數(shù)如下參數(shù)設(shè)置說(shuō)明輸入尺寸224x224x3與預(yù)訓(xùn)練模型一致批量大小32顯存不足時(shí)降到 16第一階段學(xué)習(xí)率1e-3只訓(xùn)練分類(lèi)頭快點(diǎn)收斂第一階段輪數(shù)30觀察驗(yàn)證集是否過(guò)擬合第二階段學(xué)習(xí)率1e-5微調(diào)預(yù)訓(xùn)練層避免破壞已有特征第二階段輪數(shù)10精度提升主要看這一步我在自己機(jī)器上跑完驗(yàn)證集準(zhǔn)確率大約在 92%單張圖片 CPU 推理均值在 0.4 秒左右。如果硬件資源有限也可以減少微調(diào)輪數(shù)或把 Dropout 調(diào)高一些防止過(guò)擬合。2.4 模型導(dǎo)出的格式坑訓(xùn)練完成后保存模型可能遇到兩類(lèi)典型問(wèn)題使用model.save(garbage_model.h5)保存的 H5 文件在后端load_model時(shí)提示找不到自定義層。解決辦法是保存時(shí)把自定義層注冊(cè)到custom_objects或者在保存前把模型結(jié)構(gòu)全部轉(zhuǎn)成原生 Keras 層序列化方式TensorFlow 版本和 NumPy 版本不兼容加載模型時(shí)直接報(bào)numpy.core.multiarray failed to import。這類(lèi)問(wèn)題優(yōu)先檢查requirements.txt里的版本組合比如 TensorFlow 2.10 搭配numpy1.24.3通常沒(méi)問(wèn)題但換上更高版本 NumPy 就會(huì)翻車(chē)。我在項(xiàng)目里最終導(dǎo)出的是 H5 格式因?yàn)楹蠖俗鲞M(jìn)度演示時(shí)最直觀。如果后續(xù)有部署到手機(jī)端或?yàn)g覽器端的想法可以再轉(zhuǎn)成 TFLite那樣量化后的模型更小、推理更快。3. Django 后端集成模型封裝、ORM 查詢(xún)刪除與圖片上傳模型訓(xùn)練只是起點(diǎn)真正讓系統(tǒng)完整的是 Django 后端。這一章我重點(diǎn)講模型怎么封裝進(jìn)視圖、接口怎么設(shè)計(jì)、以及熱搜詞里頻繁出現(xiàn)的“django 執(zhí)行查詢(xún)-刪除對(duì)象”到底在項(xiàng)目里怎么落地。3.1 為什么不能在視圖里直接 load_model新手最常見(jiàn)的寫(xiě)法是from tensorflow.keras.models import load_model def classify(request): model load_model(garbage_model.h5) ...這個(gè)寫(xiě)法有兩個(gè)問(wèn)題。第一每次請(qǐng)求都會(huì)重新加載一次上百 MB 的模型文件用戶(hù)多點(diǎn)兩下服務(wù)器內(nèi)存直接爆炸第二并發(fā)請(qǐng)求時(shí)可能同時(shí)觸發(fā)多次加載造成重復(fù)占用資源。正確做法是讓模型作為進(jìn)程級(jí)單例存在在模塊導(dǎo)入時(shí)加載一次所有請(qǐng)求共享同一個(gè)模型實(shí)例。Django 里實(shí)現(xiàn)單例最省事的方式是用functools.lru_cache或者全局變量。示例# garbage_prediction/service.py from functools import lru_cache from tensorflow.keras.models import load_model lru_cache(maxsize1) def get_model(): model load_model(models/garbage_model.h5) return model這樣第一個(gè)請(qǐng)求進(jìn)來(lái)時(shí)加載模型后續(xù)請(qǐng)求直接復(fù)用。如果你用的是 Gunicorn 多 worker 部署每個(gè) worker 進(jìn)程會(huì)各自加載一份模型所以?xún)?nèi)存消耗要按“worker 數(shù) x 模型大小”提前估算。3.2 預(yù)測(cè)模塊封裝把預(yù)處理、推理、結(jié)果映射放進(jìn)一個(gè)函數(shù)識(shí)別業(yè)務(wù)不能直接寫(xiě)在views.py里那樣會(huì)讓視圖變得又長(zhǎng)又難測(cè)試。我單獨(dú)建了一個(gè)service.py負(fù)責(zé)圖片預(yù)處理、模型推理和類(lèi)別映射。import numpy as np from PIL import Image def preprocess_image(img): img img.resize((224, 224), Image.LANCZOS) arr np.array(img, dtypenp.float32) if arr.shape[-1] 4: arr arr[:, :, :3] arr arr / 255.0 arr np.expand_dims(arr, axis0) return arr def predict_batch_garbage(image): model get_model() arr preprocess_image(image) probs model.predict(arr, verbose0)[0] idx int(np.argmax(probs)) confidence float(probs[idx]) subclass_name index_to_subclass[idx] category subclass_to_category[subclass_name] return subclass_name, category, confidence這里有個(gè)細(xì)節(jié)如果上傳的是 PNG 透明圖PIL 讀取后可能有 4 個(gè)通道必須在預(yù)處理里截?cái)喑?RGB否則模型輸入尺寸對(duì)不上。另外Image.open拿到的是文件句柄對(duì)象讀圖片前要確認(rèn)file.seek(0)否則可能出現(xiàn)“讀出來(lái)的圖一直是第一張”的詭異問(wèn)題。3.3 數(shù)據(jù)庫(kù)設(shè)計(jì)與“查詢(xún)-刪除對(duì)象”實(shí)操識(shí)別記錄表的設(shè)計(jì)決定了查詢(xún)和刪除好不好寫(xiě)。我定義的模型如下from django.conf import settings from django.db import models class GarbageRecord(models.Model): user models.ForeignKey( settings.AUTH_USER_MODEL, nullTrue, blankTrue, on_deletemodels.SET_NULL ) image models.ImageField(upload_togarbage/%Y%m/) subclass models.CharField(max_length32) category models.CharField(max_length16) confidence models.FloatField() created_at models.DateTimeField(auto_now_addTrue)Django ORM 的查詢(xún)和刪除正是很多剛?cè)腴T(mén) Django 的人卡住的地方。這里給一份常用操作清單# 查詢(xún)最近 10 條記錄 GarbageRecord.objects.filter(userrequest.user).order_by(-created_at)[:10] # 條件查詢(xún)只看置信度高于 0.9 的廚余垃圾記錄 GarbageRecord.objects.filter( userrequest.user, category廚余垃圾, confidence__gte0.9 ) # 聚合統(tǒng)計(jì)按類(lèi)別統(tǒng)計(jì)條數(shù) from django.db.models import Count GarbageRecord.objects.values(category).annotate(totalCount(id)) # 刪除單個(gè)對(duì)象 record GarbageRecord.objects.get(pk1) record.delete() # 按條件批量刪除 GarbageRecord.objects.filter( userrequest.user, category可回收物, confidence__lt0.7 ).delete()特別注意on_delete的選取。用戶(hù)被刪時(shí)如果希望保留這條識(shí)別記錄就選SET_NULL如果想同步清空用戶(hù)產(chǎn)生的所有記錄則用CASCADE。我在項(xiàng)目中選SET_NULL因?yàn)樽R(shí)別記錄本身有分析價(jià)值用戶(hù)解綁后數(shù)據(jù)仍應(yīng)保留。另外一個(gè)容易被忽視的是“軟刪除”。首頁(yè)的歷史記錄里我其實(shí)不建議直接物理刪除而是加一個(gè)is_active布爾字段執(zhí)行刪除操作時(shí)改為is_activeFalse列表查詢(xún)時(shí)統(tǒng)一過(guò)濾掉。這樣用戶(hù)誤刪后還能找回?cái)?shù)據(jù)庫(kù)里數(shù)據(jù)也不會(huì)因?yàn)轭l繁物理刪除而產(chǎn)生大量碎片。3.4 圖片上傳接口的設(shè)計(jì)與安全校驗(yàn)接口采用POST /api/classify/前端用 FormData 上傳圖片字段image。Django 視圖里有三步校驗(yàn)不能省import uuid from PIL import Image as PILImage from django.core.files.uploadedfile import InMemoryUploadedFile from rest_framework.decorators import api_view from rest_framework.response import Response api_view([POST]) def classify_image(request): upload request.FILES.get(image) if not upload: return Response({error: 缺少圖片}, status400) if upload.size 5 * 1024 * 1024: return Response({error: 圖片不能超過(guò)5MB}, status400) try: image PILImage.open(upload) image.verify() upload.seek(0) except Exception: return Response({error: 文件不是有效圖片}, status400) subclass, category, confidence predict_batch_garbage(image) record GarbageRecord.objects.create( userrequest.user if request.user.is_authenticated else None, imagesave_upload(upload), subclasssubclass, categorycategory, confidenceconfidence ) return Response({ subclass: subclass, category: category, confidence: round(confidence, 4) })save_upload里我沒(méi)有直接用原始文件名而是用uuid.uuid4().hex os.path.splitext(name)[1]重新生成文件名。中文文件名、路徑穿越、文件名沖突全部靠這一行解決。3.5 Django 項(xiàng)目初始化的基礎(chǔ)流程如果你對(duì)這個(gè)項(xiàng)目還不熟先按這個(gè)順序把環(huán)境搭起來(lái)這個(gè)流程覆蓋了熱搜詞里大部分內(nèi)容# 1. 創(chuàng)建虛擬環(huán)境并安裝依賴(lài) python -m venv venv source venv/bin/activate pip install django4.2 tensorflow-cpu2.10.0 pillow10.1.0 # 2. 創(chuàng)建項(xiàng)目與 app django-admin startproject garbage_project . python manage.py startapp garbage_prediction python manage.py startapp records # 3. 在 settings.py 中注冊(cè) app、配置數(shù)據(jù)庫(kù)連接和 MEDIA 路徑 # 4. 生成遷移并創(chuàng)建管理員 python manage.py makemigrations python manage.py migrate python manage.py createsuperuser新手容易犯的錯(cuò)是忘記把garbage_prediction和records加進(jìn)INSTALLED_APPS結(jié)果執(zhí)行makemigrations時(shí)提示沒(méi)有變化。還有Django 4.0 之后csrf_protect的邏輯沒(méi)有變化但如果你用 DRF 的api_view它默認(rèn)就走了 CSRF 豁免前端傳X-CSRFToken的代碼可能需要根據(jù)實(shí)際配置調(diào)整。4. 前端交互上傳、拍照、Canvas 壓縮與識(shí)別反饋閉環(huán)后端模型再準(zhǔn)前端交互做得生硬演示效果也會(huì)打折扣。我這一版前端沒(méi)有使用復(fù)雜的框架就是 Django 模板 原生 JavaScript。上傳方式分兩種相冊(cè)選圖和攝像頭拍照。4.1 相冊(cè)上傳與 Ajax 提交頁(yè)面里放一個(gè)隱藏的input typefile用戶(hù)點(diǎn)上傳按鈕后觸發(fā)文件選擇。拿到文件后先做壓縮再提交這一步是很多項(xiàng)目忽略的。手機(jī)拍出來(lái)的圖動(dòng)輒 3MB 以上如果不壓縮直接傳給后端不僅網(wǎng)絡(luò)慢PIL 讀取和模型 resize 也會(huì)拖慢響應(yīng)。壓縮代碼我放在前端 Canvas 里async function compressImage(file, maxWidth 800, quality 0.8) { const img await createImageBitmap(file); const scale Math.min(1, maxWidth / img.width); const canvas document.createElement(canvas); canvas.width img.width * scale; canvas.height img.height * scale; const ctx canvas.getContext(2d); ctx.drawImage(img, 0, 0, canvas.width, canvas.height); return new Promise((resolve) { canvas.toBlob(resolve, image/jpeg, quality); }); }壓縮后的圖片寬度控制在 800 像素以?xún)?nèi)識(shí)別精度基本不受影響但傳輸和推理時(shí)間大幅下降。然后在fetch中提交const formData new FormData(); formData.append(image, compressedBlob, capture.jpg); fetch(/api/classify/, { method: POST, headers: { X-CSRFToken: csrftoken }, body: formData }) .then(response response.json()) .then(data renderResult(data));記得在頁(yè)面加載時(shí)從 cookie 里取csrftoken否則 Django 會(huì)回 403。如果你配置了 DRF也可以直接設(shè)置SessionAuthentication之外的認(rèn)證方式但最簡(jiǎn)單可靠的還是把 token 加進(jìn)請(qǐng)求頭。4.2 攝像頭拍照識(shí)別攝像頭拍照在電腦上演示效果很好但有一個(gè)坑getUserMedia要求頁(yè)面必須在localhost或 HTTPS 環(huán)境下才能調(diào)用。Django 開(kāi)發(fā)服務(wù)器用http://localhost:8000沒(méi)問(wèn)題但如果你用 IP 地址在局域網(wǎng)里訪問(wèn)攝像頭就會(huì)以權(quán)限不足為由拒絕打開(kāi)。拍照流程是const video document.getElementById(cameraStream); const stream await navigator.mediaDevices.getUserMedia({ video: { facingMode: environment } }); video.srcObject stream; await video.play();用戶(hù)點(diǎn)擊“拍照”時(shí)用canvas.drawImage(video, 0, 0, width, height)截取當(dāng)前畫(huà)面然后同樣走toBlob壓縮流程。拍完別忘了stream.getTracks().forEach(track track.stop())不然攝像頭指示燈會(huì)一直亮著用戶(hù)體驗(yàn)很糟糕。4.3 識(shí)別結(jié)果展示與二次確認(rèn)反饋結(jié)果展示區(qū)我用一張卡片展示三個(gè)信息細(xì)分類(lèi)名稱(chēng)、四分類(lèi)標(biāo)簽、置信度。置信度低于 0.6 時(shí)把結(jié)果用黃色框標(biāo)出提示“該結(jié)果置信度較低請(qǐng)換一個(gè)角度重新拍攝或上傳更清晰的圖片”。這樣即使用戶(hù)拍到一張光線很差的圖片被誤判他也不會(huì)直接覺(jué)得系統(tǒng)是壞的而是會(huì)主動(dòng)調(diào)整拍攝方式。同時(shí)我在結(jié)果卡片下方放了兩個(gè)按鈕“標(biāo)記正確”和“標(biāo)記錯(cuò)誤”。用戶(hù)點(diǎn)了標(biāo)記后前端發(fā)一個(gè)POST /api/feedback/請(qǐng)求后端把這些反饋記錄下來(lái)。這些數(shù)據(jù)回頭可以導(dǎo)出作為下一輪模型迭代擴(kuò)充訓(xùn)練集的重要來(lái)源。這個(gè)功能在畢設(shè)答辯時(shí)是加分項(xiàng)因?yàn)樗f(shuō)明你考慮到了模型持續(xù)優(yōu)化而不是交一個(gè)靜態(tài)演示。5. 部署上線與性能優(yōu)化從“本機(jī)能跑”到“別人能用”開(kāi)發(fā)階段用python manage.py runserver沒(méi)有任何問(wèn)題但真正把系統(tǒng)給別人演示時(shí)必須面對(duì)并發(fā)、靜態(tài)文件處理、數(shù)據(jù)庫(kù)連接等一系列問(wèn)題。這一章節(jié)把從零部署到服務(wù)器上能穩(wěn)定訪問(wèn)的全過(guò)程梳理一遍。5.1 依賴(lài)版本與部署前檢查清單先看依賴(lài)組合。我的requirements.txt如下django4.2.7 djangorestframework3.14.0 tensorflow-cpu2.10.1 Pillow10.1.0 numpy1.24.3 gunicorn21.2.0 whitenoise6.6.0TensorFlow 2.10 在 Python 3.11 上的兼容性并不理想建議使用 Python 3.8 或 3.10 環(huán)境。如果你的 TensorFlow 版本升級(jí)到 2.13 以上NumPy 版本限制可以放寬具體以導(dǎo)入時(shí)是否報(bào)錯(cuò)為準(zhǔn)。部署前檢查清單settings.py中DEBUG FalseALLOWED_HOSTS里寫(xiě)入服務(wù)器 IP 或域名DATABASES如果繼續(xù)用 SQLite只適合低并發(fā)演示如果想更穩(wěn)一點(diǎn)換成 PostgreSQL靜態(tài)文件收集python manage.py collectstatic圖片上傳目錄MEDIA_ROOT要有寫(xiě)入權(quán)限并且不能用rbind這種容易被忽略的權(quán)限問(wèn)題攔住。5.2 Gunicorn 與 WhiteNoise 靜態(tài)文件方案服務(wù)器上我選擇了 Gunicorn 作為 WSGI 服務(wù)器配合 WhiteNoise 處理靜態(tài)文件Nginx 只做反向代理和 HTTPS 終結(jié)。好處是項(xiàng)目結(jié)構(gòu)簡(jiǎn)單單個(gè) Django 進(jìn)程就能服務(wù)靜態(tài)資源不需要單獨(dú)配一套復(fù)雜的 Nginx 靜態(tài)文件路徑。啟動(dòng)命令gunicorn garbage_project.wsgi:application \ --workers 3 \ --threads 2 \ --bind 0.0.0.0:8000 \ --timeout 60注意--timeout 60是必須的。模型推理在 CPU 上最壞情況可能超過(guò) 30 秒Gunicorn 默認(rèn) 30 秒超時(shí)會(huì)直接殺掉 worker用戶(hù)看到的就是 500 錯(cuò)誤。我這個(gè)配置里3 個(gè) worker 意味著內(nèi)存峰值約等于 3 份模型大小加 Django 基線內(nèi)存服務(wù)器內(nèi)存最好預(yù)留 3GB 以上。5.3 推理性能實(shí)測(cè)與常見(jiàn)坑我在 2C4G 的輕量服務(wù)器上實(shí)測(cè)單次識(shí)別請(qǐng)求的總耗時(shí)分布環(huán)節(jié)耗時(shí)圖片上傳與反序列化約 80ms圖片校驗(yàn)與預(yù)處理約 20msMobileNetV2 推理約 400ms結(jié)果寫(xiě)入數(shù)據(jù)庫(kù)約 20ms響應(yīng)返回約 10ms總耗時(shí)在 0.5 秒左右作為單用戶(hù)演示完全沒(méi)問(wèn)題。但如果短時(shí)間內(nèi)有幾十個(gè)人同時(shí)上傳三個(gè) worker 會(huì)很快被推理任務(wù)占滿(mǎn)其他請(qǐng)求只能排隊(duì)。這時(shí)候的優(yōu)化思路有兩種把高并發(fā)的圖片接收與低并發(fā)的模型推理拆開(kāi)用消息隊(duì)列如 Redis RQ異步處理識(shí)別任務(wù)前端輪詢(xún)獲取結(jié)果不要用 SQLite 存高速寫(xiě)入的識(shí)別記錄換成 PostgreSQL 或者先寫(xiě)內(nèi)存表再定期落庫(kù)。第二種方案涉及異步流程代碼復(fù)雜度會(huì)上升不建議在基礎(chǔ)版本里做。我更推薦的做法是把識(shí)別歷史記錄和畫(huà)像統(tǒng)計(jì)分開(kāi)識(shí)別時(shí)只寫(xiě)一條輕量記錄不需要在請(qǐng)求里做復(fù)雜事務(wù)。5.4 我踩過(guò)的幾個(gè)坑匯總給你這些坑我都實(shí)際踩過(guò)按影響程度排序問(wèn)題現(xiàn)象解決辦法TensorFlow 與 NumPy 版本沖突導(dǎo)入 tf 時(shí)報(bào) numpy 初始化錯(cuò)誤鎖定numpy1.24.3或用更高版本 tf 搭配新版 numpy上傳超大圖片網(wǎng)頁(yè)請(qǐng)求發(fā)送很久沒(méi)響應(yīng)前端 Canvas 壓縮到 800px 內(nèi)后端限制 5MB中文文件名上傳到對(duì)象存儲(chǔ)亂碼后端用 UUID 重命名原文件名寫(xiě)入字段DEBUGFalse 后樣式丟了頁(yè)面光禿禿一片安裝 whitenoise 并執(zhí)行 collectstatic攝像頭黑屏getUserMedia 報(bào)權(quán)限錯(cuò)誤必須用 localhost 或 HTTPS 訪問(wèn)不能用局域網(wǎng) IPSQLite 被并發(fā)寫(xiě)鎖多用戶(hù)同時(shí)識(shí)別時(shí)偶發(fā) “database is locked”生產(chǎn)環(huán)境切 PostgreSQL5.5 前端加一層輪詢(xún)的輕量方案如果你想在不上消息隊(duì)列的前提下緩解等待體驗(yàn)可以在前端識(shí)別時(shí)先拿到一個(gè) task 號(hào)后端把圖片存下來(lái)立刻返回“識(shí)別中”然后再由前端每隔 0.5 秒請(qǐng)求一次/api/classify/result/獲取結(jié)果。這樣即使推理時(shí)間超過(guò) 30 秒用戶(hù)也不會(huì)看到一個(gè)一直轉(zhuǎn)圈的請(qǐng)求超時(shí)頁(yè)面。后端實(shí)現(xiàn)上任務(wù)結(jié)果可以先存在內(nèi)存字典或緩存里鍵是 task 號(hào)值是識(shí)別結(jié)果。識(shí)別完成后由后臺(tái)線程把結(jié)果寫(xiě)入GarbageRecord同時(shí)更新緩存。前端輪詢(xún)拿到結(jié)果后再渲染頁(yè)面。這個(gè)方案只增加少量代碼就能讓體驗(yàn)提升一個(gè)檔次。寫(xiě)在最后這套系統(tǒng)還能怎么迭代做完這個(gè)項(xiàng)目我最大的體會(huì)是圖像識(shí)別只占系統(tǒng)復(fù)雜度的一小部分真正花時(shí)間的是把模型、Web、數(shù)據(jù)庫(kù)、交互這四層擰在一起。最難調(diào)試的往往不是模型精度而是文件上傳類(lèi)型判斷、CSRF token 配置、靜態(tài)文件收集這些看似不起眼的小細(xì)節(jié)。如果后續(xù)你想繼續(xù)擴(kuò)展可以在三個(gè)方向上迭代一是接入語(yǔ)音播報(bào)識(shí)別結(jié)束后直接告訴用戶(hù)應(yīng)該投哪個(gè)桶這對(duì)老人和小孩更友好二是按地理位置記錄投放點(diǎn)結(jié)合歷史識(shí)別數(shù)據(jù)生成小區(qū)垃圾分類(lèi)熱力圖這會(huì)讓系統(tǒng)從“工具”變成“數(shù)據(jù)產(chǎn)品”三是把模型換成 TFLite 并部署到手機(jī)端配合前端攝像頭實(shí)現(xiàn)完全離線的垃圾分類(lèi)助手不需要服務(wù)器也能工作。每個(gè)方向單獨(dú)拆出來(lái)都是一篇完整的實(shí)戰(zhàn)文章但骨架始終是這個(gè)項(xiàng)目搭起來(lái)的東西。對(duì)新手來(lái)說(shuō)先把這篇文章里的鏈路完整走通一遍后面再談優(yōu)化也不遲。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
屌逼传媒| 国产A v无码专区| 男人的天堂网页| 国产三级多多影院2022国产AA一级毛片无码 | 91东京热男人的天堂| 九九热免费国产视频婷婷伊人| 久草新在线| 伊人网在线观看| 国产精品色片一区二区| 9999久久久久| 熟女丰满人妻一区| 26uuu性物| 岛国黄片网站| 精品久| 中文字幕视频在线观看一区二区| 成人精品一区二区91毛片不卡| 欧美视频一| 亚洲蜜臀精品视频久久| 久久m| 午夜精品久久久久久久99热影院| 天综合网欧美| 九九国产| 男人天堂网手机版婷婷| 先锋音影AV| 日韩99神马视频片| 厕所偷拍在线| 日天天九九天堂666| 欧美第一页性| 国产三级在线现体验区| 97视频在| 9997se| 欧美96精品在线| 男人天堂网址| 亚一综合久久久久久久久久| 丝袜美腿操av| 九九在线视频| 美女上床网站| 久久香蕉国产线看观看亚洲女人 | 欧美一级美片在线观看免费| 国产久久久9999| 国产日比| 99re视频这里只有精品| 久久久亚洲精品中文字幕人妻| 丁香婷婷五月| 国产精品无套内谢| 伊人久久亚洲中文字幕不卡| 日本影视久久免费| 国语av最新自产拍在线观看| 国产亚洲国产超碰| 热天堂一区二区| 午夜欧美精品久久久| 一区二区三区高清天码| 激情五月综合网| 天天综合网91入口| 中文字幕一区二区无码成人| 色综合网1| 啊啊啊啊啊啊啊啊啊啊在线观看| 在线观看不卡一区二区三区| 99视频内射三四| 天天天天天超碰| xxx0国产在线播放| 综合熟妇一区二区三区| 亚州熟女乱伦| 男人天堂站| 欧美淫乱视频| 99精品在线播放| 欧美色偷偷| 夜夜爽爽夜夜精品视频| 久久同城AV| 久久久9品一区二区三区| AV女优男人的天堂| 欧美中文字幕男人天堂久久精品| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 亚码人妻| 人妻人妻天天碰| 亚洲制服欧美另类内射| 天天天天干| 嫩草在线视频| 超碰视97中文| 久久久久亚洲熟妇熟女| 综合久久久久久久久91| 亚洲欧美不卡线| 婷婷国产精品九区| 东京热精品97综合网| 日日操丁香五月天| TS人妖另类精品视频系列| 久久少妇视频| 殴美,日韩国产伦精品| 95自拍视频在线观看| 玖玖爱影院| 亚洲情色 自拍| 日产操逼| 粉嫩av一区二区三区天美传媒 | 国产99999久久精品| 天天欧美色| 99超级碰免费视频| 精品久久久亚洲AV成人网站| 一区e区三| 操逼999| 亚洲AV无码久久精品蜜桃小说| 人人玩人人添人人澡免费| 久久久涩| 亚洲综合九九| 国产白丝精品在线观看| 夜夜高潮夜夜爽国产伦精品| 91视频伊人| 99re9| 日韩大香蕉AV影片| 日产精品久久久一区二区| 无码九九| 欧美日韩99精品麻豆传媒| 综合情欲网| 97K超碰在线| 97精品国产97久久久久久户外免费| 国产成人99久久亚洲综合| 亚洲精品一区二区精品| 成人午夜无码视频| 人人操人人舒服| 中文乱码字幕观看视频| 手机在线A片| 国产高清成人免费视频| http://qxhbdz.com| www.AV有限公司一区| 精品人妻一区二区三区鲁大师| 美国久久一二三四| 亚洲成人一二三区| 69丨亚洲丨精品丨入口免费播放| 亚洲 中文 欧美 日韩 在线| 久久久78| 综合久久六月久久婷婷| 老熟乱一区二区三区四区| 嗯嗯不要 视频| 2023天天操夜夜操| 欧日a| 精品99999久久久久久| 日韩91网| 成人免费不卡在线视频| 国产av强奸美女| 亚洲97成人在线观看| 女人高潮大叫一级毛片| 啊啊啊啊在线观看网址| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 伊人五月天| yazhousetuoumei| 成人性交午夜免费片| 秋霞一级视频在线观看免费| 超碰精品| 极品销魂美女一区二区| 色av中文字| 亚洲深夜福利| 亚洲色图大香| 91青青在线视频| 92午夜免费福利视频| 激情五月天色色| 蜜臀精品1区2区| 天天躁日日躁AAAAXXXX国产| 日本成a人v网站在线观看| 亚洲激情深爱文学小说网站| 中亚黄色三级大片| 色眯眯av| 狠狠色噜噜狠狠狠狠2018| 狠日欧美| 男女激情黄色网址| 麻豆国产免费影片| 色欲久久99国产精品久久久久久| 午夜福利视频在线一区| 伊人久大| 操人妻少妇中文| 中文字幕一区 二 区 三 四 五 区日 日 骚| 中文字幕第二页| 久久久久性熟视频| 国产啊v在线免费播放| 九九免费影片| 嗯啊免费视频| 欧美综合娱乐久久| 99热婷婷一区二区三| 国产精品久久久亚洲一区| 肏逼视频日本| 五月天人妻综合| 啊啊啊啊啊操我视频| 日韩久久.一级黄色片| 日日玩天天干| 免费看污网站| 丁香五月天激情| 日韩欧美午夜一区二区| 天堂av最新电影网| 天天日天天射天天干| 立川理惠无码一区二区| 岛国不卡超碰护士AV在线播放| 香蕉视频欧美一卡二卡| 中文无线日韩一区| 18精品一区| 色5月婷婷| 97资源超碰| 日韩无码AB| 久久久久人妻二区精品叶可怜| 射丝袜大香蕉| 天天日天天色| 天天欧美欧美亚洲网| 啊啊啊啊免费视频| 久久风骚城市人| 久久大香蕉97| 国产欧美一区激情交| 色色九区| 九九操久久国产免费视频| 欧美人人天天网| 国产五码丝袜屁眼| 国产AV久久野战精品| 日本在线观看网址| 超碰精品国产无码| 大二网站亚洲| 色操逼网| 国产精品极品美女视频| 淫荡少妇免费| 黄色免费网页无码| 九久9精品| 深田咏美亚洲精品福利社| 日本三级一区二区 在线| 国内偷自视频区视频综合| 日韩强奸av| 中文字幕精品免费一区二区| 国产精品宅男免费| 中文字幕性感少妇av| 人人操人人干网页| 婷婷色播婷婷| 成人影 天天操 亚洲| 欧美综合骚| 91美女在线精品视频| 亚州精品一区二区三区香中文字幕在线| 99综合网| www.操| 性色国产东北露脸精品视频| 成人在线午夜视频一区| 男女啊啊啊啊啊| 国产99999| 国产熟码AV| 欧美精品一二三| 九九九九精品九九九九| 男人的天堂一区三区| 91色色色| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 欧美日韩1234| 日韩人妻有码免费视频| 妺妺跟我一起洗澡没忍住| 五月香婷婷| 女人妻一区| 久久久九精品| 蜜臀99久久精品久久久懂爱| 精品中文字幕一区二区l - 百度| 婷婷情色综合网| 日韩性爱播放| 区一二区日韩亚洲乱码av电影| 亚洲精品丝袜-不卡成人免费……| 98色网| 天天超级碰碰碰| 国内精品99999| 蜜乳成人AV| 婷婷丁香成人| 欧美91丝袜| 欧美亚洲| 激情婷婷五月天| 91美女在线视频| 91黄站| 欧美五十路熟| 中文伊人大香蕉视频| 99日免费视频中文字幕| 日韩免费高清大片在线| 嗯嗯嗯好爽| 人妻激情在线视频| 香蕉国产精品麻豆亚洲欧美日韩| 亚洲 日韩 欧美 国产综合体| 天美传媒AV国产在线| 青青草公开在线免费不卡视频| 久久精品久久久久久久久| 久久婷婷视频| 97在线观看免费| 高潮毛片无遮挡高清免费| 亚洲 欧美 91| 亚洲男人在线观看天堂| 精品性爱无码在线播放| 综合大香蕉美。| 亚欧性爱无码| 久久香蕉超碰97国产精品 | 99操视频| 超碰综合97在线| 高清无码久操视频| 97色97好| 另类TS人妖一区二区三区| 丝袜美腿欧美| 七月婷婷综合| 人妻出轨一区二区三区| 国产精品人妻无码久久久老鸭窝 | 夜草欧美| 国模不卡| 无卡一区=区| 影音先锋视频在线| 任你干在线视频| 天天激情干| 日本久久综合| 亚洲欧美日韩精品久久久一区二区| 欧美色图电影| 丁香五月婷婷五月| 精品夜夜澡人妻无码AV| 99热这里只有精品8| 亚洲日韩97| 人妻熟女av国产网站| 好一吊区二区| 久久久久久久人妻| 夜夜爽夜夜爽| 宗合情欲网| 国产1024在线播放| 国产盗摄美女如厕大神作品在线观看| 99久久精品无码一区二区毛片免费| 久久欧美1卡2卡3| 国产品精品自在在线午夜免费 | 超碰色综合| 欧美色偷拍| 搡老女人911熟妇老熟女| 欧美性暴力猛交XXXX | 中文字暮97| 青草成人免费视频一com| 大香蕉伊利av| 国产一级特黄大片处女| 凹凸 69堂 在线播放| 亚州国产精品乱| 欧美日韩在线视频网站| 免费网色网站| 欧美日韩99| 欧美亚洲情色| 国产欧美成人精品| 日本一级一级一级一级| 国产91亚洲精品一区二区三区| 日韩美女高潮喷水视频| 丁香五月婷婷色| 国产欧美在线观看免费观看| 一区二区亚州激情久婷婷欧美| 激情四射五月天| 欧美色欧美| 国产亚洲日本| 天美麻豆精品视频99| 乱伦一二三区| 亚洲人妻爽爽爽| 亚热日本熟女| 国产人妻精品久久久一区二区三区| 强奸乱伦 亚洲一区| 亚洲图片在线| 亚欧中文字幕在线视频| 熟女日韩| 色情五月婷婷| 乱伦图一区| 91亚洲网站| 嗯嗯,好大,好爽,好骚| 久久精品美女一区| 国产操逼逼网| 亚洲日韩精品久久久久一区壹牛| www亚洲欧美| 无码操逼天堂| 96久久久精品| 5252色欧美在线| 思思热在线视频精品| 蜜乳AV一区| 肏逼视频日本| 91肉丝| 久久亚州精品成人Av无| 一本色道综合久久欧美日韩精品| 国产精品国产| 成人久久久精品| 欧中日成人免费影视| 国产成人亚洲精品无码最新在线| 嗯嗯不要 视频| 久久人妻少妇| 夜色97| 屌妞视频久久久久久久| 色五月69夫妻| 第二页中文字幕| 天天综合91在线| www.狠狠| 男人天堂一区二区| 桃花色涩综合影院| 熟女视频久久| 色情五月综合婷婷| 五月丁香婷婷啪啪| 婷婷午夜| 久青草影院| 伊人91| 婷婷综合五月天| 制服乱伦| 志村玲子视频一区二区| 丰满欧美少妇| 亚洲另类色图片| 97爱欧美| 加勒比伊人综合| 九九国产热| 欧美精品三区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 国产精品视频精品一二| 国产精品视频精品一二| 五月丁香六月激情综合| 人妻精品4K4K4K4K4| 久久久久久久九九九九九九| 97色涩| 久久亚码| 9久9久9久9久视频网站| 三四中文字幕| 日本孕妇一区二区视频操逼免费看 | 亚洲成人久久美女| 日本高清电影欧美色图| 久久精品免费| 免费国产| 婷婷超| 歐美一級亂黃99在綫精品| 91情色在线| 伊色综合天堂色97| 婷婷色综合| 永久免费发布性爱网| 亚洲精品国产无码高清| 亚洲精品自拍| 青娱乐淫乱1314| 亚洲天堂精品日韩电影| 女人久久久| 91综合无码| 激情小说亚洲| 国产精品美女久久久久久网站| 91欧美大片| 成人麻豆av电影网站| 国产成人精品午夜福利| 中亚精品极乱| 午夜福利1区2区3区| 约操熟妇| 2020视频1区2区3区| 99超碰色| 综合色久欲| 欧美日韩久久精品爱爱| 日韩AV色图| 91蜜桃传媒精品久久久一区二区| 少妇淫妇久久久久久久| www.yeyecao| 91狠狠综合久久久久久| 蜜桃精品视频一区| 一区二区不卡视| 日本性爱网址| 天天享受天天看| 久久久久99精品成人片蜜臀| 欧美日韩精品一区二区三区高清| 欧美日韩国产传媒在线精品| 国产精品久久久久久9999| 国产自制av蜜乳| 亚洲成?V人片在线观看福利| 加勒比综合a∨| 久草精品国产99| 激情五月天综合网| 亚春色色| 国产精品久久久久久片| 欧美色图 人妻| 午夜小电影在线插入淫高潮| 亚洲五月天激情| 99re热| 欧美性生活男人的天堂| 97精品一二区| 综合色一区三区二区| 国产日韩欧美三级片| 嗯嗯啊好大| 岛国在线免费视频| 884t在线| 啪啪啪东京| 操B久久| 成人av在线播放| 口爆欧美91| 日韩成人性日韩成人性爱视频在线免费观看| 色99在线| 欧美不在线| 大奶啊啊好爽| 国产真实子伦对白| 超碰97在线 欧美 国产| 国产又黄又粗又猛大片| 少妇人妻精品| 人人操人人搞人人草| 超碰天天操| 中文字幕一区电影在线观看| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 99在线观看视频在线高清| 精品久久人妻成人网| 欧美天天在线| 色99视频| 成人免费毛片| 免费草草草草草视频| 国产高清MV操逼视频| 久久原创中文| 狠狠穞A片一區二區三區| 97视频免费播放| 后入 亚洲 美女 射| 亚洲一区日韩精品| 国产久久久久影院老熟女| 九九探花视频在线观看| 97资源亚洲| 色一射色一射| 国产亚洲精品美女久久久久久2021| 加勒比av官网在线| 五月丁香婷婷啪啪| 香蕉欧美| 精久久久| 亚洲s在线观看| 蜜乳AV免费观看| 亚洲诱惑天堂 | 插插综合网天天影视网| 麻豆AV一区二区| 色嗨嗨在线| 欧洲综合色| 欧美性区| 久久女婷| 蜜乳Av成人片网站| 中文字幕激情小说| 亚熟hd视频在线| 五月丁香六月婷| 家庭乱伦国产| 国产97在线视频| 伦理弟一页| 天天天天操| 看大黄色大片原件| 资源新线在线天堂| 精吧天堂| 国产25页| 久热伊人99re| 欧美日韩岛国大片在线观看| 欧美一级黄色免费专区| 一二三四区电影| 日韩在线97| 操少妇很爽av| 另类在线| 黑人精品成人一区二区三区| 性爱网站一区二区| 人妻少妇精品| www.91视频网| 色香网| 熟女AV一区| 麻豆av一区二区三区| 凹凸视频特色日本特黄| 搡老女人老妇女AAA一VU麻豆| 日本一区不卡| 亚洲一二三四区| 久操视频在线| 亚洲熟妇AV日韩熟妇在线| 久久鲁夜| 草久久久| 超碰97最新人妻| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 欧美色女人| 十八禁黄色| 91熟女视频网| 日韩欧美天堂| 后入日本1234| 九九久精品| 夜夜嗨免费视频| 精品中文一区二区| 道久久五香丁月婷婷激情综合| 中日韩久久人妻一区二区| 色噜噜国产在线| 97二区四区| 亚洲色图 欧美热图 清纯唯美 另类自拍| 亚洲第一页色| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 2001天天操| 欧美久久九九| 大香蕉伊人网WWWn0n| 69AV女优男人的天堂| 男人下部插入女人下部| 玖玖爱综合| 欧美日韩国产男人| 久久 久久国内精品亚洲| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 一区二区精品日韩欧美在线观看| 呦呦影院| 97精品熟女少妇一区| 免费观看国产不卡av| 青椒国产97在线熟女| 欧美日韩国产色图在线| 婷婷丁香久久| 欧美人妻精品| 一本大道综合伊人精品热热| 亚洲性图91| 99热这里只有精品1| 人人妻人人爽一区二区三区| 天天干人人看综合| 黄色在线网站| 亚洲色婷婷| 9久久9综合| 黄色十八禁| 一区二区视频在看| 免费av高清无码| 精品性爱一二三区| 青娱乐亚洲热| 日韩精品影视| 高清孕妇孕交| a级成人毛片免费视频高清| 99色视频| 亚洲大胆人体av| 一本色道人妻久久| 97资源视频| 韩国黄色片精品久久久 | 97免费在线视频| 黄片免费久久久久久久| 首页亚洲国产高跟丝袜诱惑视频 | 国产亚洲精品A在线观看下载| 国产日韩在线播放| 日韩紧密久久| 色欧美在线| 影音先锋日本一区二区| 性爱视频久久| 国产一| 男人女人18禁片免费看网站| 熟女六十路| 黑丝日韩av丝袜av| 久久久久久久久久久久色网| 日日噜噜夜夜狠狠视频无| 无码9区| 亚洲久草AV色图| 伊人黄色片| 国产suv精品一区二区四| 欧美久久人体| 强奸乱伦麻豆| 性色av一区二区| 啊啊啊草死我| 五月婷婷丁香| 香港久久久| 国产自产一区视频在线| 九九玖玖精品| 伊人操| 日韩黄色成人性爱| 天堂综合| 国产日产精品久久快鸭的功能介绍| 91粉芽高清在线一区二区| 欧美洲精品一级| 91久久免费视频互動交流| 99热这里| 视频二区美腿制服人妻欧美| 极品美女福利在线观看| 蜜桃色院一区久久 | 在线看片国产精品每日更新| 色天使大香蕉| 日本熟女中文| 色超碰综合| 99亚洲国产精品色一区二区三区| 亚州伊人色综台| 黄色成年| 国产亚洲国产超碰| 中文字幕精品三级久久久| 三级色综合| 国产25页| 中文字幕一区二区在线日韩精品| 97天天做| 欧美激情性爱视频网站| 国产污视频麻豆传媒一区二区| 日韩大香蕉| 91一区二区| 亚洲熟女人妻中文字幕一区二区| 久久这里只精品99re66图| 999熟女精品| 91高清无码下载| 久久精品中文| 中文字幕免费看大片| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 午夜无码熟妇丰满人妻| 干婷婷综合网| 亚洲性高潮| 欧美日日夜夜| 一区二区三区黄色片a| 熟妇国产免费一区| 亚洲高清无码免费观看视频| 亚洲色宗合| 天天综合有色网| 不卡一区二区日本视频| 亚洲精品 欧美97色色| 男人的天堂啪啪啪啪啪蜜桃不卡| 少妇综合网| 国产青视频| 日韩激情啪啪| 久久精品一区二区三区四区五区| 精品九九九九九九九| 色色色天美视频| 加勒比海人人操超碰在线| 啊a一区在线| 天天看天天在线精品| 亚洲色图8| 超碰午夜在线| 热99这里只有精品| 色激情综合网站| 青青伊人久久| 深夜操逼网| 中文字幕奈奈美被公侵犯| 99精品无码| 午夜天堂网| 久久九色| 一本久道在线综合视频| 国产精品噜噜噜日日日| 国产精品视频| 极品色社| 色官网在线| 日韩欧美午夜一区二区| 噜噜噜噜久久久精品免费| 国产性刺激| 啪啪综合网| 无码WWW免费视频网站| 黑人综合网| 日本五区不卡| 北京美女一区二区| 伊色综合天堂色97| 亚洲av无码成人精品国产| 国产久久免费精品视频| 激情欧美97| 97久久精品不卡| 自拍视频大全亚洲专媒视频/一区二区三区 | 日本超碰在线国产一区| 91在线精品| 五月天久久综合网| 国产高清成人免费视频| 国产一二三福利视频网| 啊啊啊啊啊好舒服视频| 久久男人网| 人妻久热在线| 97色伦欧美| 99综合网| 婷婷色在线| 日本黄 R色 成 人网站| 久久激情亚洲精品无码?V| 一区二区三区高清天码| 成人免费视瓶| 超碰精品国产无码| 18禁看网站一区| 亚洲欧美人妻| 起碰97| 日少妇视频| 久久久久久久性爱| 日躁天天爽爽| AV中亚| 97香蕉网| 亚洲 无码 偷拍| 亚洲欧美另类激情小说| 91 欧美| 91内射| 国产在线视频午夜精华在| 好爽视频在线观看视频 | 精品美女在线视频| 中文97国产| 97天天弄| 免费国产| 中国和日本人色哪个不下载能放| 亚洲第一视频 欧美风情 日韩| 99日视频在线免费| 国产精品一区二区密臀| 夜夜躁狠狠躁日日躁av| 免费国产视频| 无码137片内射在线影院| 久久精品人人做人人看| 成全在线观看免费观看| 国产精品自在线发布| av片在线观看免费播放| 色爱综合网| 好湿好紧好爽 视频| 久草色悠悠在线视频| 人妻少妇色综合| 亚洲AV不卡在线观看| 97色欧洲| 精品99999| 日韩黄片视频试看| 国产色呦呦| 99热超碰| 大香蕉欧美伊| 制服丝袜第二页| 国产成人五月天丁香花| 久久产精品一区二区三区电影| 思思视频免费看网站| 国产精品免费日韩| 五月丁香大香蕉| 亚洲欧美九九九| 美女网站黄页| 久久午夜色播影院免费高清| 久久精品国产亚洲AV高清演员表| 一区二区三区视频在线观看免费| 久久久九97| 超碰久久草| 亚洲国产天堂| 免费精品人妻一区二区三| 9999久久久久| 美骚妇av高清在线| 九久9精品| 日韩国产欧美伦理在线| 六月色婷婷| 美女诱惑在线一区| 日韩性色| 粉嫩粉嫩一区性色AV片| 婷婷色五月激情| 五月天综合网| 亚洲国产天堂| 在线看片国产精品每日更新| 校园春色制服丝袜中文字亚洲| 精品人妻一区春色| 大香蕉综合网| 日韩性爱电影一区 | 岛国毛片在线观看免费| 五月天婷婷基地| 小草av不卡亚洲二区| 超碰在线一区| 欧美刺激色黄片免费看| 久久久久ab| 丝袜亚洲综合| 97人人干| 欧美图片色五月天| 久久亚洲AV无码专区国产精品| 大稥蕉免费视频这里只有精品| 亚洲综合图片在线| 桃花色综合影院| 欧美操逼一二三区| 另类老少妇| 日韩精品人妻一| 嗯嗯,啊啊,国产精品| 精品十八在线观看| 成人性爱美曰韩| 青女在线| 丰满美女一级毛片在线播放| 超碰亚洲欧美日韩无| 欧美午夜熟妇黑人精品91| 日本一区二区三区四区免费观看| 成人网欧美风情| 国产精品视频内谢女人| 少妇超碰在线| 欧美加勒比| 婷婷五月天福利| 国产精品一区在线播放| 人妻激情偷乱视三区频一区二区| 一区二区三区色综合| 69少妇一区二区| 少妇三P| 国内偷自视频区视频综合| 亚洲精品天天影视综合网 | 色欲av国内精品久久久久久| 在线不卡视频| 97在线免费视频观看| 婷婷色导航| 精品九区| 久久啊哟| 99久久久久久亚洲精品不卡| 日韩国产十八禁| 日韩黄片视频试看| 色阁阁AV综合网| 亚洲古典另类欧美在线| 熟妇无码视频三区| 我爱大香蕉| 久久东京热久久| 啊啊啊啊啊啊在线看| 性色AV蜜色av色欲av| 一区二区首页| 岛国激情视频软件| 亚洲一区制服诱惑| 伊人99热| 国产又黄又爽| 亚洲欧美精品久| 人人操人人摸人| 亚洲无码久久久久久久| 蜜桃狠狠色伊人亚洲综合 | 亚洲性图91| 欧美做爰无码A片视频| 在线欧美亚洲| 大香蕉免| 911粉嫩人妻| 色五月av| 色欲色香天天天综合网www-亚洲综合国| 亚洲蜜乳av| 亚洲综合嫩| 欧美久久毛片基地| 欧美日韩国产中文精品字幕自在自线| 91久热| 久久9亚洲| 亚洲国产成人精品无码专区| 欧美精品庄| 欧美中文狠| 日本免费亚洲欧美| 黄色香蕉视频网站一区| 蜜桃臀一区二区aV| 男女打扑克高清网站| 丁香六月激情| 色97干| 午夜福利在线视频1000| 狠狠干婷婷| 久久精品欧美一区二区三区不卡| 天天操福利视频综合网站| 99999精品成人| 亚洲一本大道中文字幕无码在线| 国产农村妇女精品| 国产精品久久久久999| 九九热精品免费视频| 国产日韩欧美亚洲精品95| 久久久久久久唑| 国产熟女精品区| 六月婷激情福利天堂69| 欧美熟女操屄| 操逼网站网站| 日韩91网站| 丰满丝袜少妇AV| 蜜臀人妻少妇久久在线观看| 五月丁香婷婷综合网| 久久黄色性爱视频| 日本操逼视频免费| 全国男人天堂网| 欧美后入视频| 嗯……啊…嗯嗯…啊…好舒服| 韩国黄色片精品久久久| 日日日日做夜夜夜夜无码| 蜜臀久久99精品久久久久| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 国产偷拍网站| 久久久久久十| 亚州高清av| 麻豆 亚洲 97| 97人人中文网| 99热97| 91美女丝袜诱惑视频| 亚洲熟女中文字幕在线| 岛国视频一二三区| 色哟哟综合| 国产精品福利资源在线尤物| 天天色欧美| 久久精品国产亚洲粉嫩| 男人的天堂三级| 九九九九九九九九九九九蜜桃| 超碰97色色| 亚洲av总站| 精品免费1| 啊a一区在线| 99热色这里只有精品| 人妻AV在线| 午夜天堂啪啪| 99热自拍| 久久午夜伦| 欧美精品第3页| 99视频内射三四| 久久天堂婷婷网| 密桃99999| 熟妇在线视频一区二区| 五月丁香婷婷色| 婷婷色网| 亚州少妇| 精品人妻一区二区三区-国产精品| 欧插网站| 色第一页| 色综合久久夜色精品国产天堂| 日本天天干天天搞一区| 日韩色女精品| 亚洲做性| 久草午夜| 日韩极品无码B| 五月婷婷丁香六月丁香| 日本熟女免费視颖| 欧美日韩在线国产在线| 1769精品一区二区三区| 婷婷激情五月| 99超碰色| 亚洲图片激情综合另类| av橘色网站| 99热最新网址| 偷拍伦理视频| 婷婷伊人一区| 噜噜噜亚洲精品| 超碰久草| 91bbbbbb| 色色毛片| 看大黄色大片原件| 国产精品久久伊人| 日韩三级一区 | 后入精品| 家庭乱伦麻豆| 伊人网综合在线视频| 香蕉婷婷| 97中文字幕色| 91欧洲入口| 亚洲av青草久久一区二区| 精品国产91av一区二区三区 | 色妇91| 黑人精品欧美一区二区蜜桃| 亚洲美女AV无码| 一牛影视成人片免费| 狠狠综合网| 99re69| 91性网| 操迟操逼在巾线Fre看| 9999久久久久| 中国黑人三级片网站上区| 四季av一区二区凹凸精品小说| 一级二级在线观看| 国产 v乱码一区二| 嫩草 人人网精品| 亚洲 欧美 日韩另类 麻豆| 亚洲欧美日韩免费观看| 国产精品免费视频人成| 成人日本精品九区| 精品人妻少妇| 男人a天堂手机在线版| 内射白嫩美女| 欧美,日韩,中文,另类| 国产无吗在线播放| 精品人妻伦一二三区久久| 亚洲揄拍网| 欧美日韩在线小说| 亚洲天堂 视频你懂的| 久久九七| 啊啊啊好多水| 激情五月天色色| 日韩欧美资源| 另类亚洲一区二区三区| 99九九久久| 久久九操在线观看| 久久久久亚洲三级电影| 密桃99999| 人妻熟女一区二区三区视频| 久干9操| 亚洲 欧美 小说| 乱欲视频| 日本久久久久久久久| 丰满熟妇大乳做爰| 欧美熟女操屄| B049AV在线播放| 1769国内精品视频| 国内精品不卡无毒99999| 鸥美中出| 91操碰| 国产精品午夜福利| 亚洲欧综合另类无码一区| 四虎免费看黄| 欧美综合国产精品久久丁香| 亚洲欧美九九| 欧美亚洲天堂| 嗯啊啊啊轻点视频 | 无码直播久久久| 中文字幕视频2区| 欧美色网| 亚洲综合码| 日韩性爱一级片| 亚洲国产一级中文综合久久天堂在线免费观看 | 91丨人妻丨国产丨丝袜| 丝袜美腿诱惑亚洲欧美视频在线观看 | 日韩欧美中文字幕搭讪巨乳美人妻视频| 国产精品无套内谢| 欧美色图人妻| 唐山老熟妇露脸啪啪叫| 精品人妻一区二区三区蜜桃视频| 香蕉人人操tv| 久热这里| 五月婷婷激情网| 2019天天干| 啊啊啊啊啊在线视频| 国产对白刺激视频| 操逼短片| 五月婷色| 欧美精品三级黄片| 久久久久久九九九九-美女久久久久久久-成人AV | 欧美色色色| 久久精品熟妇丰满人妻99| 中文字幕一二三区| 97人人夜夜精品视频| 亚洲欧美国产va在线| 亚洲精品a人片在线观看视| 清纯唯美第一页| 国产女上位好爽在线| 人妻9117c| 久久精品国产精品| 一区二区三区视频| 天天综合网网欲色| 99亚洲人人| 欧美在线观看综合国产| 97视频在线观看免费高清| 天天看片天天爽| 一本大道不卡一二三区| 成人久久久精品| 性爱久久| 国产视频一区二区三区在线免费观看| 青青欧洲黑| 性爱综合网| 欧美巨大性舒爽顶到了| 午夜福利在线合集| 激情第四色| 人人操我人人干| 美女黄色91| 久久伊人青青草| 丁香五月激情综合国产| 青娱乐淫乱1314| 中文字幕在线第二页| 久久国产精品一级二级三级| 日逼逼免费看| 久久人妻熟女一区二区| 久久精品72| 五月天激情国产综合婷婷婷| 国产精品 久久久精品一牛| 色99久草| 国产AV人人 夜夜人人澡| 色婷婷99| 天天艹天天日| 97超碰色色| 人妻天天爽夜夜爽2| 欧美日韩理论一区| 69精品人人人人| 岛国大片在线观看网站入口| 99热在线播放| 久久精品99| 精产国品一区二三产品| 色玖玖| 无码乱人伦中文视频| 国产精品麻豆成人av| AV中文字幕三四五| 麻豆天美在线喷水AV| 中文字幕亚洲欧美在线不卡| 99热欧美| 99热只有这里有精品| 日韩av电影成人在线| 九九九九AV| 91天堂丝袜美腿| 加勒比五月天| 97色色色综合网站| 另类图片五月| 婷婷五月天丁香| 亚洲一本大道中文字幕无码在线| 欧美日韩啪啪电影| 国产精品人妻免费精品| 日本一二三免费久久| 福利大香蕉| 欧美传媒一区| 久久综合女优| 久久一二三级一一一| 极品丝袜无码| 亚洲AV小说| 五月天综合| 丁香五月激情综合| 91色婷婷综合久久中文字幕二区| 欧美 日韩 亚洲 春色| 操婢日韩| 人人操我人人干| 久久透逼视频| 天天干天天舔| 亚洲精品自拍| www久久国产精品| 思思热在线视频在线| 秋霞网无码| 亚洲无码精品AV久久久| 丰满人妻一区二区三区色-百度| 久久精品久久久久久久| 色色97爱| 97亚洲精品超碰| 久久老女人| 亚欧高清| 午夜操逼不卡| 国产精品久久久无码AV网站| 操逼啊啊啊91| 国产92麻豆天美精品色欲5| 国产尤物AV尤物在线观看不卡| 黄色网址在线免费观看| 美中日韩无码| 亚洲欧美国产日本一区二区三区| 91精品丝袜久久久久久| 一区二区视频在线播放| 嗯阿好爽好紧| 久久国产视频专区一二三| 91人妻视频|