{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 基于K-近邻的车牌号识别"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 一、案例简介\n",
    "\n",
    "图像的智能处理一直是人工智能领域广受关注的一类技术，在人工智能落地的进程中发挥着重要作用。其中车牌号识别作为一个早期应用场景，已经融入日常生活中，为我们提供了诸多便利，在各地的停车场和出入口都能看到它的身影。车牌号识别往往分为字符划分和字符识别两个子任务，本案例我们将关注字符识别的任务.\n",
    "\n",
    "## 二、作业说明\n",
    "本次我们使用已经分割好的车牌图片作为数据集，包括数字 0-9、字母 A-Z（不包含 O 和 I）以及省份简称共 65 个类，编号从 0 到 64。数据已经分成了训练集和测试集，里面的文件夹用 label 编号命名，一个文件夹下的所有图片都属于该文件夹对应的类，每个图片都是 20 * 20 的二值化灰度图。尝试用 K-NN 的方法对分割好的字符图像进行自动识别和转化。 可以使用 sk-learn 等第三方库，不要求自己实现K-NN。\n",
    "\n",
    "### 基础任务（80分）：\n",
    "1. 数据预处理任务：将图片数据读入，标准化，将每个图像表示为一维向量，同时保留其对应的标签。这是进行模型训练之前的重要步骤。\n",
    "\n",
    "2. 模型训练任务：使用 sklearn库的KNeighborsClassifier类，构建K-NN模型，并对训练集进行训练。\n",
    "\n",
    "3. 模型评估任务：使用模型对测试集进行预测，然后计算模型的准确率。可以使用 sklearn库的accuracy_score函数来实现。\n",
    "\n",
    "4. 参数分析任务：探究当K值变化时，模型在测试集上的准确率如何变化。可以绘制一个图表，显示不同K值对应的准确率。\n",
    "\n",
    "5. 数据集大小影响任务：分析当训练集大小变化时，测试结果如何变化。可以尝试不同大小的训练集，记录并分析结果。\n",
    "\n",
    " \n",
    "\n",
    "### 扩展任务（20分）：\n",
    "1. 距离度量分析任务：分析在K-NN中使用不同的距离度量方式（如欧氏距离、曼哈顿距离等）对模型效果的影响。\n",
    "\n",
    "2. 方法对比任务：对比平权K-NN与加权K-NN的预测效果，分析不同权重设置对结果的影响。平权K-NN认为所有邻居的投票权重相同，而加权K-NN则根据距离远近来确定权重，更近的邻居有更大的投票权。\n",
    "\n",
    "3. 数据增强任务：考虑到车牌字符可能在不同的光照、角度和大小下出现，可以尝试进行数据增强，如旋转、缩放、剪切，亮度，对比度等操作，以提高模型的泛化能力。可调包（from PIL import Image,ImageEnhance ）\n",
    "\n",
    "4. 数据均衡任务：如果数据集中的各类别样本数量不平衡，可能会对K-NN的性能产生影响。可以尝试使用过采样或者欠采样的方法，来使得各类别样本数量均衡。可调包（from imblearn.over_sampling import SMOTE ）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "tips：\n",
    "\n",
    "图片数据的特征之一是冗余性，即一张128x128的图片降维到64x64依然不影响识别，因为图像的像素矩阵中的某个像素值与周边的像素值的相关性很强，因此相差并不大。所以，可以考虑对图像数据进行降维来增加模型的训练速度和精度."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.8.5 64-bit (conda)",
   "name": "python385jvsc74a57bd007efdcd4b820c98a756949507a4d29d7862823915ec7477944641bea022f4f62"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
