Flutter车牌识别插件car_license_plate的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter车牌识别插件car_license_plate的使用

A Flutter Package To Use Vehicle License Plate of Iran

此项目是一个用于车牌识别的 Flutter 插件包,包含适用于所有平台的特定平台实现代码。

获取开始

这个项目是一个 Flutter 插件包的起点,它包含适用于所有平台的特定平台实现代码。

车牌输入模式

车牌输入模式

车牌显示模式

车牌显示模式

使用方法

// 使用车牌显示模式
const CarLicensePlate(
isInputType: false,
noneInputAlphabetSection: "الف",
noneInputCityNumber: "63",
noneInputThreeNumberSection: "369",
noneInputTwoNumberSection: "21",
),

// 使用车牌输入模式
CarLicensePlate(
isInputType: true,
inputCityNumberTextFormField: TextFormField(),
inputTwoNumberSectionTextFormField: TextFormField(),
inputThreeNumberSectionTextFormField: TextFormField(),
pickedPersianWord: pickedWordValue,
modalBottomSheet: showBottomSheet
)

// 使用TextFormFields
TextFormField(
controller:TwoNumberSectionController,
focusNode: TwoNumberSectionFocus,
textDirection: TextDirection.ltr,
textAlign: TextAlign.center,
style: TextStyle(
// 字号必须为36。
fontSize: 36,
color: Theme.of(context).brightness == Brightness.light ? Colors.black : Colors.white,
),
keyboardType: TextInputType.number,
decoration: InputDecoration(
// 提示文本可以是两个或三个字符("--" 或 "---")基于车牌的区域。
hintText: "- -",
hintStyle: TextStyle(fontSize: 30, color: Theme.of(context).brightness == Brightness.light ? Colors.black : Colors.white),
// 边框必须是InputBorder.none;
border: InputBorder.none,
),
)

// 使用波斯文字
List<String> persianWords = ['الف', 'ب', 'پ', 'ت', 'ث', 'ج', 'چ', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'ژ', 'س', 'ش', 'ص', 'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ک', 'گ', 'ل', 'م', 'ن', 'و', 'ه', 'ی', 'معلولین'];

// 使用底部模型表单
// 定义一个动态字符串,初始值为'الف',但根据点击值变化。
String pickedWordValue = "الف";

void showBottomSheet(BuildContext context) {
  showModalBottomSheet<void>(
    context: context,
    shape: const RoundedRectangleBorder(
      borderRadius: BorderRadius.vertical(top: Radius.circular(40)),
    ),
    builder: (BuildContext context) {
      return ClipRRect(
        borderRadius: const BorderRadius.vertical(top: Radius.circular(40)),
        child: Container(
          color: Theme.of(context).brightness == Brightness.light ? HexColor("#F8F8F8") : HexColor("#272727"),
          child: Padding(
            padding: const EdgeInsets.all(24.0),
            child: GridView.count(
              crossAxisCount: 4, // 列数
              childAspectRatio: 2.35, // 每个项目的宽高比
              children: persianWords.map<Widget>((String value) {
                return InkWell(
                  onTap: () {
                    setState(() {
                      pickedWordValue = value;
                    });
                    Navigator.pop(context);
                  },
                  child: Container(
                    alignment: Alignment.center,
                    margin: const EdgeInsets.all(8.0),
                    child: Text(value),
                  ),
                );
              }).toList(),
            ),
          ),
        ),
      );
    },
  );
}

更多关于Flutter车牌识别插件car_license_plate的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter车牌识别插件car_license_plate的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成并使用car_license_plate插件进行车牌识别的代码示例。请注意,此示例假设你已经设置好了Flutter开发环境,并且已经在pubspec.yaml文件中添加了car_license_plate插件的依赖。

1. 在pubspec.yaml中添加依赖

首先,确保你的pubspec.yaml文件中包含car_license_plate插件的依赖项:

dependencies:
  flutter:
    sdk: flutter
  car_license_plate: ^最新版本号 # 请替换为实际可用的最新版本号

然后运行flutter pub get来安装依赖。

2. 导入插件并使用

接下来,在你的Flutter项目的Dart文件中导入并使用该插件。下面是一个简单的示例,展示如何使用car_license_plate插件进行车牌识别。

import 'package:flutter/material.dart';
import 'package:car_license_plate/car_license_plate.dart';
import 'dart:typed_data/uint8list.dart';
import 'dart:io';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Car License Plate Recognition',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: LicensePlateRecognitionScreen(),
    );
  }
}

class LicensePlateRecognitionScreen extends StatefulWidget {
  @override
  _LicensePlateRecognitionScreenState createState() => _LicensePlateRecognitionScreenState();
}

class _LicensePlateRecognitionScreenState extends State<LicensePlateRecognitionScreen> {
  String? recognizedPlate;
  Uint8List? imageBytes;

  Future<void> pickImage() async {
    try {
      final imagePicker = ImagePicker();
      final pickedFile = await imagePicker.pickImage(source: ImageSource.camera);

      if (pickedFile != null) {
        File imageFile = File(pickedFile.path);
        imageBytes = await imageFile.readAsBytes();

        // 使用car_license_plate插件进行车牌识别
        final result = await CarLicensePlate.recognizePlate(imageBytes: imageBytes!);
        setState(() {
          recognizedPlate = result.plateNumber;
        });
      }
    } catch (e) {
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Car License Plate Recognition'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: pickImage,
              child: Text('Pick Image'),
            ),
            if (recognizedPlate != null)
              Text(
                'Recognized Plate: $recognizedPlate',
                style: TextStyle(fontSize: 20, color: Colors.green),
              ),
          ],
        ),
      ),
    );
  }
}

3. 注意事项

  • 权限:确保你的AndroidManifest.xmlInfo.plist文件中包含了必要的权限,比如相机权限。
  • 错误处理:在实际应用中,应该添加更多的错误处理逻辑,比如处理文件读取失败、插件调用失败等情况。
  • 插件版本:由于插件可能会更新,请参考最新的插件文档和示例代码来确保代码的正确性和功能完整性。

这个示例展示了如何使用car_license_plate插件来从相机中选择一张图片,并识别其中的车牌号码。希望这对你有所帮助!

回到顶部