-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlocal-search.xml
46 lines (21 loc) · 29.9 KB
/
local-search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>a</title>
<link href="/2024/09/08/a/"/>
<url>/2024/09/08/a/</url>
<content type="html"><![CDATA[]]></content>
</entry>
<entry>
<title>about</title>
<link href="/2024/09/08/about/"/>
<url>/2024/09/08/about/</url>
<content type="html"><![CDATA[<h1 id="交通标志识别"><a href="#交通标志识别" class="headerlink" title="交通标志识别"></a>交通标志识别</h1><h2 id="文件夹架构"><a href="#文件夹架构" class="headerlink" title="文件夹架构"></a>文件夹架构</h2><p>组织一个机器学习项目的文件夹结构可以帮助你更好地管理代码、数据和结果。以下是一个推荐的文件夹结构,适用于交通标志识别项目:</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br></pre></td><td class="code"><pre><code class="hljs shell">VC2024/<br>├── data/<br>│ ├── raw/ # 原始数据集<br>│ │ ├── train/ # 训练集<br>│ │ ├── test/ # 测试集<br>│ │ └── valid/ # 验证集<br>│ ├── processed/ # 预处理后的数据<br>│ │ ├── train/<br>│ │ ├── test/<br>│ │ └── valid/<br>│ └── augmented/ # 增强后的数据<br>│ ├── train/<br>│ └── valid/<br>├── notebooks/ # Jupyter Notebooks 文件<br>│ ├── data_preprocessing.ipynb # 数据预处理<br>│ ├── feature_extraction.ipynb # 特征提取<br>│ ├── model_training.ipynb # 模型训练<br>│ └── model_evaluation.ipynb # 模型评估<br>├── models/ # 保存的模型<br>│ ├── saved_models/<br>│ │ └── traffic_sign_classifier.pkl # 最终保存的模型<br>│ └── model_selection/ # 模型选择过程中保存的中间模型<br>│ ├── model_v1.pkl<br>│ ├── model_v2.pkl<br>│ └── ...<br>├── src/ # 源代码<br>│ ├── __init__.py<br>│ ├── data_preprocessing.py # 数据预处理代码<br>│ ├── feature_extraction.py # 特征提取代码<br>│ ├── data_augmentation.py # 数据增强代码<br>│ ├── model_training.py # 模型训练代码<br>│ ├── model_evaluation.py # 模型评估代码<br>│ └── utils.py # 工具函数<br>├── scripts/ # 脚本,用于运行各个步骤<br>│ ├── preprocess_data.py # 预处理数据<br>│ ├── augment_data.py # 增强数据<br>│ ├── train_model.py # 训练模型<br>│ ├── evaluate_model.py # 评估模型<br>│ └── save_best_model.py # 保存最佳模型<br>├── tests/ # 单元测试,确保代码的可靠性<br>│ ├── test_data_preprocessing.py<br>│ ├── test_feature_extraction.py<br>│ ├── test_data_augmentation.py<br>│ ├── test_model_training.py<br>│ └── test_model_evaluation.py<br>├── requirements.txt # 项目依赖的 Python 包<br>├── README.md # 项目说明文件<br>└── .gitignore # Git 忽略文件#<br></code></pre></td></tr></table></figure><hr><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><h3 id="数据准备和预处理"><a href="#数据准备和预处理" class="headerlink" title="数据准备和预处理"></a>数据准备和预处理</h3><ul><li><p>数据获取和预处理</p><ul><li>加载交通标志的图像数据集。</li></ul></li><li><p>对图像进行预处理,例如直方图均衡化、角度调整等,以增强图像质量和一致性。</p></li><li><p>数据增强:</p><ul><li>使用数据增强技术扩展训练数据集,以减少过拟合风险和提高模型的泛化能力。常见的数据增强技术包括:<ul><li>随机旋转、平移、缩放图像。</li><li>随机应用镜像翻转。</li><li>添加噪声或模糊处理。</li></ul></li></ul></li></ul><h3 id="特征工程和数据分析"><a href="#特征工程和数据分析" class="headerlink" title="特征工程和数据分析"></a>特征工程和数据分析</h3><ul><li><p>特征提取</p><ul><li><p>根据交通标志的形状和颜色进行分类。</p></li><li><p>找到圆形,可以用霍夫圆变换</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs python">cv2.HoughCircle()<br></code></pre></td></tr></table></figure></li><li><p>找到矩形,可以用形状识别</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><code class="hljs python"><span class="hljs-keyword">for</span> contour <span class="hljs-keyword">in</span> contours:<br> <span class="hljs-comment"># 计算轮廓的周长</span><br> perimeter = cv2.arcLength(contour, <span class="hljs-literal">True</span>)<br> <br> <span class="hljs-comment"># 进行多边形拟合</span><br> approx = cv2.approxPolyDP(contour, <span class="hljs-number">0.02</span> * perimeter, <span class="hljs-literal">True</span>)<br> <br> <span class="hljs-comment"># 如果轮廓有四个顶点,则认为它是一个矩形</span><br> <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(approx) == <span class="hljs-number">4</span>:<br> x, y, w, h = cv2.boundingRect(approx)<br> aspect_ratio = w / <span class="hljs-built_in">float</span>(h)<br> <br> <span class="hljs-comment"># 检查矩形的宽高比</span><br> <span class="hljs-keyword">if</span> <span class="hljs-number">0.8</span> < aspect_ratio < <span class="hljs-number">1.2</span>:<br> cv2.drawContours(image, [approx], -<span class="hljs-number">1</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">255</span>, <span class="hljs-number">0</span>), <span class="hljs-number">4</span>)<br></code></pre></td></tr></table></figure></li></ul></li><li><p>使用形状描述符(如Hu矩)和颜色特征(如颜色直方图)来提取特征。</p></li></ul><h3 id="模型选择和训练"><a href="#模型选择和训练" class="headerlink" title="模型选择和训练"></a>模型选择和训练</h3><ul><li><strong>选择模型</strong>:<ul><li>根据数据集的特征和复杂度选择合适的模型。可以从简单的模型如支持向量机(SVM)或决策树开始,到复杂的深度学习模型如卷积神经网络(CNN)。</li><li>在初步选择后,可以使用交叉验证来评估模型的性能。</li></ul></li><li><strong>模型训练和调优</strong>:<ul><li>使用Scikit-learn提供的模型和算法进行训练。例如,对于分类任务,可以使用 <code>LogisticRegression</code>、<code>RandomForestClassifier</code> 等。</li><li>考虑模型的正则化设置。例如,在 <code>LogisticRegression</code> 中通过调整 <code>C</code> 参数来控制正则化的强度。</li></ul></li><li><strong>模型保存和加载</strong>:<ul><li>使用 <code>joblib</code> 或 <code>pickle</code> 库保存训练好的模型,以便在需要时加载和使用。</li></ul></li></ul><h3 id="模型评估和优化"><a href="#模型评估和优化" class="headerlink" title="模型评估和优化"></a>模型评估和优化</h3><ul><li><p>性能评估</p><ul><li>使用测试集评估模型的性能,包括准确率、召回率、精确率等指标。</li></ul></li><li><p>如果模型表现不佳,可以考虑调整模型超参数、增加训练数据、改进特征工程等方法来优化模型。</p></li></ul><h3 id="实际应用和持续改进"><a href="#实际应用和持续改进" class="headerlink" title="实际应用和持续改进"></a>实际应用和持续改进</h3><ul><li><p>模型部署和应用</p><ul><li>将训练好的模型部署到实际环境中,例如交通标志识别系统。</li></ul></li><li><p>持续监控和改进模型,以适应新数据和场景的变化。</p></li></ul><h3 id="示例代码"><a href="#示例代码" class="headerlink" title="示例代码"></a>示例代码</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><code class="hljs python">python复制代码<span class="hljs-keyword">from</span> sklearn.linear_model <span class="hljs-keyword">import</span> LogisticRegression<br><span class="hljs-keyword">from</span> sklearn.model_selection <span class="hljs-keyword">import</span> train_test_split<br><span class="hljs-keyword">from</span> sklearn.metrics <span class="hljs-keyword">import</span> accuracy_score<br><span class="hljs-keyword">from</span> sklearn.externals <span class="hljs-keyword">import</span> joblib<br><span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np<br><br><span class="hljs-comment"># 示例:交通标志识别的完整训练流程</span><br><br><span class="hljs-comment"># 1. 数据准备和预处理</span><br><span class="hljs-comment"># 假设已经完成数据加载和预处理的部分</span><br><br><span class="hljs-comment"># 2. 特征工程和数据分析</span><br><span class="hljs-comment"># 假设已经完成特征提取的部分</span><br><br><span class="hljs-comment"># 3. 模型选择和训练</span><br><span class="hljs-comment"># 划分训练集和测试集</span><br>X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=<span class="hljs-number">0.2</span>, random_state=<span class="hljs-number">42</span>)<br><br><span class="hljs-comment"># 创建Logistic回归模型,并进行训练</span><br>model = LogisticRegression(C=<span class="hljs-number">0.1</span>)<br>model.fit(X_train, y_train)<br><br><span class="hljs-comment"># 4. 模型保存和加载</span><br><span class="hljs-comment"># 保存模型</span><br>joblib.dump(model, <span class="hljs-string">'traffic_sign_classifier.pkl'</span>)<br><br><span class="hljs-comment"># 加载模型</span><br>loaded_model = joblib.load(<span class="hljs-string">'traffic_sign_classifier.pkl'</span>)<br><br><span class="hljs-comment"># 5. 模型评估和优化</span><br><span class="hljs-comment"># 使用加载的模型进行预测</span><br>y_pred = loaded_model.predict(X_test)<br><br><span class="hljs-comment"># 评估模型性能</span><br>accuracy = accuracy_score(y_test, y_pred)<br><span class="hljs-built_in">print</span>(<span class="hljs-string">f"Accuracy: <span class="hljs-subst">{accuracy}</span>"</span>)<br><br><span class="hljs-comment"># 实际应用和持续改进</span><br><span class="hljs-comment"># 将模型部署到交通标志识别系统中,并持续监控和优化模型性能</span><br></code></pre></td></tr></table></figure><p>通过以上流程,可以结合Scikit-learn的功能和方法来建立和优化交通标志识别模型。这个流程不仅帮助你实现模型的训练和部署,还能够在实践中不断改进和优化模型的性能。</p><h1 id="问题"><a href="#问题" class="headerlink" title="问题"></a>问题</h1><p>有监督还是无监督</p><p>怎么分类</p><p>怎么学习</p><hr><h3 id="示例代码-1"><a href="#示例代码-1" class="headerlink" title="示例代码"></a>示例代码</h3><p>在 <code>data_preprocessing.py</code> 文件中可以包含如下代码:</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><code class="hljs css">import cv2<br>import os<br>import numpy as np<br><span class="hljs-selector-tag">from</span> skimage import exposure<br><br>def preprocess_image(<span class="hljs-selector-tag">image</span>):<br> # Histogram equalization<br> image = exposure.<span class="hljs-built_in">equalize_hist</span>(image)<br> return image<br><br>def <span class="hljs-built_in">preprocess_dataset</span>(input_dir, output_dir):<br> if not os.path.<span class="hljs-built_in">exists</span>(output_dir):<br> os.<span class="hljs-built_in">makedirs</span>(output_dir)<br> <br> for filename in os.<span class="hljs-built_in">listdir</span>(input_dir):<br> img_path = os.path.<span class="hljs-built_in">join</span>(input_dir, filename)<br> image = cv2.<span class="hljs-built_in">imread</span>(img_path)<br> processed_image = <span class="hljs-built_in">preprocess_image</span>(image)<br> cv2.<span class="hljs-built_in">imwrite</span>(os.path.<span class="hljs-built_in">join</span>(output_dir, filename), processed_image)<br><br>if __name__ == <span class="hljs-string">"__main__"</span>:<br> <span class="hljs-built_in">preprocess_dataset</span>(<span class="hljs-string">'data/raw/train'</span>, <span class="hljs-string">'data/processed/train'</span>)<br> <span class="hljs-built_in">preprocess_dataset</span>(<span class="hljs-string">'data/raw/test'</span>, <span class="hljs-string">'data/processed/test'</span>)<br> <span class="hljs-built_in">preprocess_dataset</span>(<span class="hljs-string">'data/raw/valid'</span>, <span class="hljs-string">'data/processed/valid'</span>)<br></code></pre></td></tr></table></figure><p>在 <code>data_augmentation.py</code> 文件中可以包含如下代码:</p><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><code class="hljs css">import numpy as np<br><span class="hljs-selector-tag">from</span> skimage import <span class="hljs-attribute">transform</span>, util<br>import os<br>import cv2<br><br>def augment_image(<span class="hljs-selector-tag">image</span>):<br> # Random rotation and scaling<br> rotated = transform.<span class="hljs-built_in">rotate</span>(image, angle=np.random.<span class="hljs-built_in">uniform</span>(-<span class="hljs-number">30</span>, <span class="hljs-number">30</span>))<br> scaled = transform.<span class="hljs-built_in">rescale</span>(rotated, scale=np.random.<span class="hljs-built_in">uniform</span>(<span class="hljs-number">0.8</span>, <span class="hljs-number">1.2</span>))<br> # Random horizontal flip<br> if np.random.<span class="hljs-built_in">rand</span>() > <span class="hljs-number">0.5</span>:<br> scaled = np.<span class="hljs-built_in">fliplr</span>(scaled)<br> return scaled<br><br>def <span class="hljs-built_in">augment_dataset</span>(input_dir, output_dir):<br> if not os.path.<span class="hljs-built_in">exists</span>(output_dir):<br> os.<span class="hljs-built_in">makedirs</span>(output_dir)<br> <br> for filename in os.<span class="hljs-built_in">listdir</span>(input_dir):<br> img_path = os.path.<span class="hljs-built_in">join</span>(input_dir, filename)<br> image = cv2.<span class="hljs-built_in">imread</span>(img_path)<br> augmented_image = <span class="hljs-built_in">augment_image</span>(image)<br> cv2.<span class="hljs-built_in">imwrite</span>(os.path.<span class="hljs-built_in">join</span>(output_dir, filename), augmented_image)<br><br>if __name__ == <span class="hljs-string">"__main__"</span>:<br> <span class="hljs-built_in">augment_dataset</span>(<span class="hljs-string">'data/processed/train'</span>, <span class="hljs-string">'data/augmented/train'</span>)<br> <span class="hljs-built_in">augment_dataset</span>(<span class="hljs-string">'data/processed/valid'</span>, <span class="hljs-string">'data/augmented/valid'</span>)<br></code></pre></td></tr></table></figure><p>在 <code>train_model.py</code> 文件中可以包含如下代码:</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><code class="hljs python"><span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np<br><span class="hljs-keyword">from</span> sklearn.linear_model <span class="hljs-keyword">import</span> LogisticRegression<br><span class="hljs-keyword">from</span> sklearn.model_selection <span class="hljs-keyword">import</span> train_test_split<br><span class="hljs-keyword">from</span> sklearn.metrics <span class="hljs-keyword">import</span> accuracy_score<br><span class="hljs-keyword">from</span> sklearn.externals <span class="hljs-keyword">import</span> joblib<br><span class="hljs-keyword">import</span> cv2<br><span class="hljs-keyword">import</span> os<br><br><span class="hljs-keyword">def</span> <span class="hljs-title function_">load_dataset</span>(<span class="hljs-params">data_dir</span>):<br> images = []<br> labels = []<br> <span class="hljs-keyword">for</span> filename <span class="hljs-keyword">in</span> os.listdir(data_dir):<br> img_path = os.path.join(data_dir, filename)<br> image = cv2.imread(img_path)<br> label = <span class="hljs-built_in">int</span>(filename.split(<span class="hljs-string">'_'</span>)[<span class="hljs-number">0</span>]) <span class="hljs-comment"># 假设文件名格式为 <label>_<id>.jpg</span><br> images.append(image)<br> labels.append(label)<br> <span class="hljs-keyword">return</span> np.array(images), np.array(labels)<br><br><span class="hljs-comment"># Load data</span><br>X_train, y_train = load_dataset(<span class="hljs-string">'data/augmented/train'</span>)<br>X_test, y_test = load_dataset(<span class="hljs-string">'data/processed/test'</span>)<br><br><span class="hljs-comment"># Flatten the images for training (if using LogisticRegression)</span><br>X_train_flat = X_train.reshape(X_train.shape[<span class="hljs-number">0</span>], -<span class="hljs-number">1</span>)<br>X_test_flat = X_test.reshape(X_test.shape[<span class="hljs-number">0</span>], -<span class="hljs-number">1</span>)<br><br><span class="hljs-comment"># Create and train the model</span><br>model = LogisticRegression(C=<span class="hljs-number">0.1</span>)<br>model.fit(X_train_flat, y_train)<br><br><span class="hljs-comment"># Save the model</span><br>joblib.dump(model, <span class="hljs-string">'models/saved_models/traffic_sign_classifier.pkl'</span>)<br><br><span class="hljs-comment"># Evaluate the model</span><br>y_pred = model.predict(X_test_flat)<br>accuracy = accuracy_score(y_test, y_pred)<br><span class="hljs-built_in">print</span>(<span class="hljs-string">f"Accuracy: <span class="hljs-subst">{accuracy}</span>"</span>)<br></code></pre></td></tr></table></figure><p>在 <code>evaluate_model.py</code> 文件中可以包含如下代码:</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><code class="hljs python"><span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np<br><span class="hljs-keyword">from</span> sklearn.metrics <span class="hljs-keyword">import</span> accuracy_score<br><span class="hljs-keyword">from</span> sklearn.externals <span class="hljs-keyword">import</span> joblib<br><span class="hljs-keyword">import</span> cv2<br><span class="hljs-keyword">import</span> os<br><br><span class="hljs-keyword">def</span> <span class="hljs-title function_">load_dataset</span>(<span class="hljs-params">data_dir</span>):<br> images = []<br> labels = []<br> <span class="hljs-keyword">for</span> filename <span class="hljs-keyword">in</span> os.listdir(data_dir):<br> img_path = os.path.join(data_dir, filename)<br> image = cv2.imread(img_path)<br> label = <span class="hljs-built_in">int</span>(filename.split(<span class="hljs-string">'_'</span>)[<span class="hljs-number">0</span>]) <span class="hljs-comment"># 假设文件名格式为 <label>_<id>.jpg</span><br> images.append(image)<br> labels.append(label)<br> <span class="hljs-keyword">return</span> np.array(images), np.array(labels)<br><br><span class="hljs-comment"># Load data</span><br>X_test, y_test = load_dataset(<span class="hljs-string">'data/processed/test'</span>)<br><br><span class="hljs-comment"># Flatten the images for evaluation (if using LogisticRegression)</span><br>X_test_flat = X_test.reshape(X_test.shape[<span class="hljs-number">0</span>], -<span class="hljs-number">1</span>)<br><br><span class="hljs-comment"># Load the model</span><br>model = joblib.load(<span class="hljs-string">'models/saved_models/traffic_sign_classifier.pkl'</span>)<br><br><span class="hljs-comment"># Evaluate the model</span><br>y_pred = model.predict(X_test_flat)<br>accuracy = accuracy_score(y_test, y_pred)<br><span class="hljs-built_in">print</span>(<span class="hljs-string">f"Accuracy: <span class="hljs-subst">{accuracy}</span>"</span>)<br></code></pre></td></tr></table></figure>]]></content>
</entry>
<entry>
<title>Hello World</title>
<link href="/2024/09/03/hello-world/"/>
<url>/2024/09/03/hello-world/</url>
<content type="html"><![CDATA[<p>Welcome to <a href="https://hexo.io/">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues">GitHub</a>.</p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo new <span class="hljs-string">"My New Post"</span><br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo server<br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo generate<br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ hexo deploy<br></code></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/one-command-deployment.html">Deployment</a></p>]]></content>
</entry>
</search>