yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
K230 Vision Module📖
1. Quick Start
  • 0.Get start
  • 1. K230 firmware download and burning
  • 2. Install the programming environment
  • 3. Debug and run routines
  • 4. Offline running routine
  • 5. Micropython Quick Start
  • 6. GUI Program Instructions
  • 7.K230 module bracket installation tutorial
  • 8.K230 module 2DOF PTZ installation tutorial
2. Basic Courses
  • 1.FPIOA pin assignment
  • 2.RGB lights
  • 3.Buzzer
  • 4.Buttons
  • 5.Serial communication
  • 6.I2C communication
  • 7.PWM
  • 8.WDT watchdog
  • 9.Timer
  • 10.Fourier Transform
  • 11.SHA256 encryption
  • 12.AES encryption
  • 13.Multithreading
  • 14.File reading and writing
  • 15.Image Display
  • 16.Touch Display
  • 17.Camera display
  • 18.Image Flip
  • 19.Camera
3. Draw the image
  • 1. Draw the lines
  • 2. Draw the circle
  • 3. Draw the rectangle
  • 4. Draw the ellipse
  • 5. Draw the arrow
  • 6. Draw the crosshairs
  • 7. Draw text
  • 8. Draw key points
4. Graphics detection
  • 1. Line segment detection
  • 2. Rectangle Detection
  • 3. Circle detection
  • 4. Object edge detection
  • 5. Line inspection basics:fast linear regression
5. Color recognition
  • 1. Color recognition
  • 2. Object Counting
  • 3. Multi-color recognition
  • 4. K230 Color Line Patrol
6.1 CV_lite Image Processing Special Topic
  • 1.Introduction to cv_litenew
  • 2.cv_lite API Reference Manualnew
  • 3.Color Block Recognition - Grayscale Imagenew
  • 4.Color Block Recognition - Color Imagenew
  • 5.Circle Recognition - Grayscale Imagenew
  • 6.Circle Recognition - Color Imagenew
  • 7.Corner Recognition - Grayscale Imagenew
  • 8.Corner Recognition - Color Imagenew
  • 9.Edge Recognition - Grayscale Imagenew
  • 10. Edge Recognition - Color Imagenew
  • 11. Rectangle Recognition - Grayscale Imagenew
  • 12.Rectangle Recognition - Color Imagenew
  • 13.Rectangle recognition combined with corner recognition - grayscale imagenew
  • 14.Rectangle recognition combined with corner recognition - color imagenew
  • 15.Image Binarization - Grayscalenew
  • 16.Image Binarization - Color Imagenew
  • 17.Exposure Adjustmentnew
  • 18.Image Black Hat Operationsnew
  • 19.Image Color Histogramnew
  • 20.Image Closingnew
  • 21.Image Expansionnew
  • 22.Image Corrosionnew
  • 23.Gaussian Blurnew
  • 24.Gradient Transformationnew
  • 25.Mean Fuzzynew
  • 26.Image Openingnew
  • 27.Image Top Hat Operationnew
  • 28.PnP rangingnew
  • 29.Find rectangles and measure distancesnew
  • 30.Image grayscale world white balancenew
6.2 OpenCV Image Processing Special Topicnew
  • 1. OpenCV Introduction
  • 2. OpenCV API Reference
  • 3. Image Basic Transforms
  • 4. Morphological Operations
  • 5. Color Segmentation and Shape Classification
  • 6. Corner and Centroid Detection
  • 7. Hough Circle Detection
  • 8. Hough Line Detection
  • 9. Contour Analysis
  • 10. Drawing Functions
  • 11. Template Matching
  • 12. Image Blur Filtering
  • 13. Edge Detection
  • 14. Thresholding
  • 15. Color Segmentation
  • 16. Histogram and Pixel Transformation
  • 17. Arithmetic and Bitwise Operations
  • 18. Channel Operation and Statistics
  • 19. Image File Read and Write
  • 20. Pixel Level Transformation
7. Code type recognition
  • 1.Barcode recognition
  • 2.QR code recognition
  • 3.AprilTag tag recognition
  • 4.DM code recognition
8. Face Recognition
  • 1.[Must-read] General code structure and prerequisite knowledge of AI vision routines
  • 2.Face Detection
  • 3.Facial key point recognition
  • 4.Face orientation detection
  • 5.Face 3D Network
  • 6.Gaze direction detection
  • 7.Register for face recognition
9. Human body characteristics
  • 1. Human body detection
  • 2. Human key point detection
  • 3. Human posture recognition
  • 4. Fall detection
  • 5. Palm detection
  • 6. Palm key point detection
  • 7. Palm key point classification
  • 8. Gesture Recognition
  • 9. Dynamic gesture recognition
  • 10. Rock, Paper, Scissors
10. Scenario Application
  • 1.OCR character detection
  • 2.OCR character recognition
  • 3.yolov8n target detection
  • 4.yolov8n segmentation
  • 5. Self-learning object recognition
  • 6. License plate detection
  • 7. License Plate Recognition
  • 8. Target Tracking
  • 9. Fruit classification
  • 10. Garbage classification
  • 11. Road sign recognition
11. Audio and video processing
  • 1. Audio Recording
  • 2. Play Audio
  • 3. Video Recording
  • 4. Play Video
  • 5. Keyword wake-up
12. Network Basics
  • 1. Wireless network connection
  • 2. AP hotspot mode
  • 3. TCP-Server Example
  • 4. TCP-Client Example
  • 5. UDP-Server Example
  • 6. UDP-Client Example
  • 7. HTTP-Server Example
  • 8. HTTP-Client Example
  • 9. MQTT Quick Start
  • 10. MQTT-Publisher
  • 11. MQTT-Subscriber
  • 12. RTSP real-time image transmission
  • 13. RTSP real-time image transmission combined with AIDemo
  • 14. Call OpenRouter large model aggregation service
  • 15. Open the Resource Monitoring Panel
13. LVGL Graphical Interface
  • 1. Introduction to LVGL
  • 2. Create a button
  • 3. Create a slider
  • 4. Create an Image
  • 5. Create a text box and keyboard
14. GUI Code Tutorial & Secondary Development
  • 01.GUI System Architecture
  • 02.Core Engine Initialization
  • 03.Application Discovery Mechanism in GUI
  • 04.Desktop Layout Algorithm
  • 05.Advanced UI Styling
  • 06.BaseApp Base Class Analysis
  • 07.Hello_World Practical
  • 08.GUI Application Lifecycle and Resource Management
15. Train your own model
  • 1. Local deployment of yolo training environment
  • 2. Use online platforms for training
16.Touch Course
  • 1.Touch point detectionnew
  • 2.Touch Paintingnew
  • 3.Touch to take a photonew
17. Multi-master communication (purchased separately)
ESP32-K230
  • 1.k230 color recognition
  • 2.k230 barcode recognition
  • 3.k230 QR code recognition
  • 4.k230Apriltag code recognition
  • 5.k230DM code recognition
  • 6.k230 face detection
  • 7.k230 gaze direction
  • 8.k230 face recognition
  • 9.k230 human body detection
  • 10.k230 fall detection
  • 11.k230 palm detection
  • 12.k230 gesture recognition
  • 13.k230OCR character recognition
  • 14.k230 object detection
  • 15.k230 target tracking
  • 16.k230 self-learning object recognition
  • 17.k230 license plate recognition
Jetson-K230
  • 1.k230 color recognition
  • 2.k230 barcode recognition
  • 3.k230 QR code recognition
  • 4.k230Apriltag code recognition
  • 5.k230DM code recognition
  • 6.k230 face detection
  • 7.k230 gaze direction
  • 8.k230 face recognition
  • 9.k230 human body detection
  • 10.k230 fall detection
  • 11.k230 palm detection
  • 12.k230 gesture recognition
  • 13.k230OCR character recognition
  • 14.k230 object detection
  • 15.k230 target tracking
  • 16.k230 self-learning object recognition
  • 17.k230 license plate recognition
MSPM0G3507-K230
  • 1.k230 color recognition
  • 2.k230 barcode recognition
  • 3.k230 QR code recognition
  • 4.k230Apriltag code recognition
  • 5.k230DM code recognition
  • 6.k230 face detection
  • 7.k230 gaze direction
  • 8.k230 face recognition
  • 9.k230 human body detection
  • 10.k230 fall detection
  • 11.k230 palm detection
  • 12.k230 gesture recognition
  • 13.k230OCR character recognition
  • 14.k230 object detection
  • 15.k230 target tracking
  • 16.k230 self-learning object recognition
  • 17.k230 license plate recognition
Pico-K230
  • 1.k230 color recognition
  • 2.k230 barcode recognition
  • 3.k230 QR code recognition
  • 4.k230Apriltag code recognition
  • 5.k230DM code recognition
  • 6.k230 face detection
  • 7.k230 gaze direction
  • 8.k230 face recognition
  • 9.k230 human body detection
  • 10.k230 fall detection
  • 11.k230 palm detection
  • 12.k230 gesture recognition
  • 13.k230OCR character recognition
  • 14.k230 object detection
  • 15.k230 target tracking
  • 16.k230 self-learning object recognition
  • 17.k230 license plate recognition
raspberrypi-K230
  • 1.k230 color recognition
  • 2.k230 barcode recognition
  • 3.k230 QR code recognition
  • 4.k230Apriltag code recognition
  • 5.k230DM code recognition
  • 6.k230 face detection
  • 7.k230 gaze direction
  • 8.k230 face recognition
  • 9.k230 human body detection
  • 10.k230 fall detection
  • 11.k230 palm detection
  • 12.k230 gesture recognition
  • 13.k230OCR character recognition
  • 14.k230 object detection
  • 15.k230 target tracking
  • 16.k230 self-learning object recognition
  • 17.k230 license plate recognition
RDK-K230
  • 1.k230 color recognition
  • 2.k230 barcode recognition
  • 3.k230 QR code recognition
  • 4.k230Apriltag code recognition
  • 5.k230DM code recognition
  • 6.k230 face detection
  • 7.k230 gaze direction
  • 8.k230 face recognition
  • 9.k230 human body detection
  • 10.k230 fall detection
  • 11.k230 palm detection
  • 12.k230 gesture recognition
  • 13.k230OCR character recognition
  • 14.k230 object detection
  • 15.k230 target tracking
  • 16.k230 self-learning object recognition
  • 17.k230 license plate recognition
STM32-K230
  • 1. stm32_k230 color recognition
  • 2. stm32_k230 barcode recognition
  • 3. stm32_k230 QR code recognition
  • 4. stm32_k230Apriltag code recognition
  • 5. stm32_k230DM code recognition
  • 6. stm32_k230 face detection
  • 7.stm32_k230 looking direction
  • 8. stm32_k230 face recognition
  • 9. stm32_k230 human body detection
  • 10. stm32_k230 fall detection
  • 11. stm32_k230 palm detection
  • 12. stm32_k230 gesture recognition
  • 13. stm32_k230OCR character recognition
  • 14. stm32_k230 object detection
  • 15. stm32_k230 target tracking
  • 16. stm32_k230 self-learning object recognition
  • 17.stm32_k230 license plate recognition
Arduino-K230
  • 1.arduino_k230 color recognition
  • 2.arduino_k230 barcode recognition
  • 3.arduino_k230 QR code recognition
  • 4.arduino_k230 Apriltag code recognition
  • 5.arduino_k230 DM code recognition
  • 6.arduino_k230 face detection
  • 7.arduino_k230 looking direction
  • 8.arduino_k230 face recognition
  • 9.arduino_k230 human body detection
  • 10.arduino_k230 fall detection
  • 11.arduino_k230 palm detection
  • 12.arduino_k230 gesture recognition
  • 13.arduino_k230 OCR character recognition
  • 14.arduino_k230 object detection
  • 15.arduino_k230 target tracking
  • 16.arduino_k230 self-learning object recognition
  • 17.arduino_k230 license plate recognition
Microbit-K230
  • 1.microbit_k230 color recognition
  • 2.microbit_k230 barcode recognition
  • 3.microbit_k230 QR code recognition
  • 4.microbit_k230 Apriltag code recognition
  • 5.microbit_k230 DM code recognition
  • 6.microbit_k230 face detection
  • 7.microbit_k230 looking direction
  • 8.microbit_k230 face recognition
  • 9.microbit_k230 human body detection
  • 10.microbit_k230 fall detection
  • 11.microbit_k230 palm detection
  • 12.microbit_k230 gesture recognition
  • 13.microbit_k230 OCR character recognition
  • 14.microbit_k230 object detection
  • 15.microbit_k230 target tracking
  • 16.microbit_k230 self-learning object recognition
  • 17.microbit_k230 license plate recognition
MSPM0G3519-K230
  • 1. K230 Color Recognitionnew
  • 2. K230 Barcode Recognitionnew
  • 3. K230 QR Code Recognitionnew
  • 4. K230 Apriltag Code Recognitionnew
  • 5. K230 DM Code Recognitionnew
  • 6. K230 Face Detectionnew
  • 7. K230 Gaze Directionnew
  • 8. K230 Face Recognitionnew
  • 9. K230 Human Body Detectionnew
  • 10. K230 Fall Detectionnew
  • 11. K230 Palm Detectionnew
  • 12. K230 Gesture Recognitionnew
  • 13. K230 OCR Character Recognitionnew
  • 14. K230 Object Detectionnew
  • 15. K230 Target Trackingnew
  • 16. K230 Self-learning Object Recognitionnew
  • 17. K230 License Plate Recognitionnew
18.Extension case (purchase separately)
For 2DOF Electric Platform
  • 1.Moving target control and automatic tracking system
  • 2.Human body recognition alarm
  • 3.Gesture Recognition
  • 4.Rock Paper Scissors
  • 5.Fruit sorting
  • 6.Color Tracking
  • 7.Face Tracking
MSPM0G3507 wheeled chassis V1/V2 combined with K230 application case
  • 1.Visual tracking
  • 2.Color tracking
  • 3.Color response
  • 4.Road sign recognition
  • 5.Machine code tracking
  • 6.QR code recognition action
  • 7.Autonomous avoid
  • 8.License plate tracking
  • 9.Face tracking
  • 10.Gaze direction tracking
  • 11.Palm tracking
  • 12.Target tracking
  • 13.Human body tracking
  • 14.OCR character recognition action
STM32 wheeled chassis V1/V2 combined with K230 application case
  • 1.Visual tracking
  • 2.Color tracking
  • 3.Color response
  • 4.Road sign recognition
  • 5.Machine code tracking
  • 6.QR code recognition action
  • 7.Autonomous avoid
  • 8.License plate tracking
  • 9.Face tracking
  • 10.Gaze direction tracking
  • 11.Palm tracking
  • 12.Target tracking
  • 13.Human body tracking
  • 14.OCR character recognition action
MSPM0G3519 wheeled chassis V1/V2 combined with K230 application case
  • 1.Visual trackingnew
  • 2.Color trackingnew
  • 3.Color responsenew
  • 4.Road sign recognitionnew
  • 5.Machine code trackingnew
  • 6.QR code recognition actionnew
  • 7.Autonomous avoidnew
  • 8.License plate trackingnew
  • 9.Face trackingnew
  • 10.Gaze direction trackingnew
  • 11.Palm trackingnew
  • 12.Target trackingnew
  • 13.Human body trackingnew
  • 14.OCR character recognition actionnew
19. Expansion case(purchase separately)new
  • 1.Motion target control and Auto track system
  • 2.Vehicle-mounted balance ball motion control system
Download
  • Manual
  • CanMV IDE
  • Software Tools
  • Firmware
  • Source Code
  • Appendix
Download ZIP

Welcome to K230 Vision Module repository

2.Touch Painting

Enhanced Touch Painting

Enhanced Touch PaintingExample ResultsCode Explanation1. Import Necessary Modules2. Initialize the touch sensor and screen constants3. Define the DrawingApp class3.1 Initializing the Drawing State and UI Parameters3.2 Creating the Display Image and Initializing the Interface4. User Interface Drawing Methods4.1 Clearing the Canvas4.2 Drawing the User Interface5. Touch Event Handling Logic5.1 Main Touch Handling Method5.2 Handling Drawing Operations5.3 Handling UI Interactions6. Update the display7. Main Program Logic7.1 Main Loop: Reading and Processing Touch Data7.2 Exception Handling and Resource Release8. Main program entry

Example Results

The source code file for this example is named enhanced_touch_drawing.py.

Connect to the IDE and run the code. You will see a drawing application interface with a canvas and toolbar. You can draw on the canvas by touching the screen, select different colors and brush sizes, and clear the canvas. The toolbar contains color selection, brush size adjustment, and control buttons (such as clearing the screen).

image-20251011183143049

Code Explanation

1. Import Necessary Modules

xxxxxxxxxx
import time, os, sys
from media.display import *
from media.media import *
from machine import TOUCH
  • time, os, sys: System-related modules for time control, operating system functions, and system operations. - media.display and media.media: used for screen display and media resource management.
  • machine.TOUCH: used to initialize and operate the touch sensor.

2. Initialize the touch sensor and screen constants

xxxxxxxxxx
tp = TOUCH(0)
DISPLAY_WIDTH = 640
DISPLAY_HEIGHT = 480
CANVAS_WIDTH = 480
CANVAS_HEIGHT = 480
TOOLBAR_WIDTH = 160
  • TOUCH(0): Initializes the touch sensor on pin 0, tp is used to read touch data later.
  • DISPLAY_WIDTH and DISPLAY_HEIGHT: Define the total screen resolution as 640x480.
  • CANVAS_WIDTH and CANVAS_HEIGHT: Define the canvas area's resolution to 480x480.
  • TOOLBAR_WIDTH: Define the toolbar width to 160 pixels.

3. Define the DrawingApp class

xxxxxxxxxx
class DrawingApp:
    def __init__(self):
        """Initialize the drawing program"""

The DrawingApp class is the core of the entire drawing application, responsible for managing the drawing state, user interface drawing, and handling touch events.

3.1 Initializing the Drawing State and UI Parameters

xxxxxxxxxx
self.current_color = (0, 0, 0)
self.current_brush_size = 5
self.is_drawing = False
self.last_x = None
self.last_y = None
  • current_color: The currently selected drawing color, defaults to black.
  • current_brush_size: The current brush size, defaults to 5 pixels.
  • is_drawing: A Boolean value that records whether drawing is in progress.
  • last_x and last_y: Record the coordinates of the last touch point, used for drawing continuous lines.

In addition, the code defines a color palette, brush size options, and UI layout parameters (such as the position and size of the color selection area, brush size selection area, and control button area).

3.2 Creating the Display Image and Initializing the Interface

xxxxxxxxxx
self.display_image = image.Image(DISPLAY_WIDTH, DISPLAY_HEIGHT, image.RGB888)
self.clear_canvas()
self.draw_ui()
  • Create an RGB888 image object, display_image, to display the entire interface and drawing content.
  • Call clear_canvas() to clear the canvas and set a white background.
  • Call draw_ui() to draw the user interface (toolbar, color selection, brush size selection, and control buttons).

4. User Interface Drawing Methods

4.1 Clearing the Canvas

xxxxxxxxxx
def clear_canvas(self):
    """Clear the canvas"""
    self.display_image.clear()
    self.display_image.draw_rectangle(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT, color=(255, 255, 255), fill=True)
    self.display_image.draw_rectangle(CANVAS_WIDTH, 0, TOOLBAR_WIDTH, CANVAS_HEIGHT, color=(240, 240, 240), fill=True)
    self.display_image.draw_line(CANVAS_WIDTH, 0, CANVAS_WIDTH, CANVAS_HEIGHT, color=(200, 200, 200), thickness=2)
  • Clear the entire display image.
  • Draw a white canvas background and a gray toolbar background.
  • Draw a separator line between the canvas and toolbar.

4.2 Drawing the User Interface

xxxxxxxxxx
def draw_ui(self):
    """Drawing the user interface"""
  • draw_ui() calls several sub-methods to draw the toolbar, color palette, brush size selection, and control buttons.
  • Specific methods include draw_color_palette() (drawing the color selection), draw_brush_size_palette() (drawing the brush size selection), draw_control_buttons() (drawing the control buttons), and draw_status_info() (drawing the current status information).

5. Touch Event Handling Logic

5.1 Main Touch Handling Method

xxxxxxxxxx
def handle_touch(self, x, y, event):
    """Handling touch events"""
    if x < CANVAS_WIDTH:
        self.handle_drawing(x, y, event)
    else:
        self.handle_ui_interaction(x, y, event)
  • Based on the touch point's location, determine whether it's within the canvas area ( x < CANVAS_WIDTH ) or the toolbar area, and call handle_drawing() or handle_ui_interaction() to handle the situation, respectively.

5.2 Handling Drawing Operations

xxxxxxxxxx
def handle_drawing(self, x, y, event):
    """Handling painting operations"""
    if event == TOUCH.EVENT_DOWN:
        self.is_drawing = True
        self.last_x = x
        self.last_y = y
        self.display_image.draw_circle(x, y, self.current_brush_size//2, color=self.current_color, fill=True)
    elif event == TOUCH.EVENT_MOVE and self.is_drawing:
        if self.last_x is not None and self.last_y is not None:
            self.display_image.draw_line(self.last_x, self.last_y, x, y, color=self.current_color, thickness=self.current_brush_size)
        self.last_x = x
        self.last_y = y
    elif event == TOUCH.EVENT_UP:
        self.is_drawing = False
        self.last_x = None
        self.last_y = None
  • Touch Down Event (EVENT_DOWN): Starts drawing, records the starting point, and draws a circle.
  • Touch Move Event (EVENT_MOVE): If drawing is in progress, draws a line connecting the previous point and the current point.
  • Touch Up Event (EVENT_UP): Ends drawing and resets the coordinates of the previous point.

5.3 Handling UI Interactions

xxxxxxxxxx
def handle_ui_interaction(self, x, y, event):
    """Handling UI interactions"""
    if event != TOUCH.EVENT_DOWN:
        return
    if self.color_palette_y <= y <= self.color_palette_y + 60:
        self.handle_color_selection(x, y)
    elif self.brush_palette_y <= y <= self.brush_palette_y + len(self.brush_sizes) * self.brush_spacing:
        self.handle_brush_size_selection(x, y)
    elif self.control_buttons_y <= y <= self.control_buttons_y + 80:
        self.handle_control_buttons(x, y)
  • Handles only touch-down events (EVENT_DOWN).
  • Based on the Y coordinate of the touch point, determines whether it is in the color selection area, brush size selection area, or control button area, and calls the corresponding method.

6. Update the display

xxxxxxxxxx
def update_display(self):
    """Update display - simplified version, avoiding pixel level manipulation"""
    Display.show_image(self.display_image)
  • Use Display.show_image() to update the screen to display the current image, avoiding complex pixel-level operations.

7. Main Program Logic

xxxxxxxxxx
def main():
    """Main program"""
    print("Launching the enhanced touch painting program...")
    Display.init(Display.ST7701, width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT, to_ide=True)
    MediaManager.init()
    app = DrawingApp()
  • Initialize the display and media manager.
  • Create a DrawingApp instance and start the drawing application.

7.1 Main Loop: Reading and Processing Touch Data

xxxxxxxxxx
while True:
    os.exitpoint()
    points = tp.read(1)
    if len(points) > 0:
        pt = points[0]
        app.handle_touch(pt.x, pt.y, pt.event)
        app.update_display()
    time.sleep(0.02)
  • Continuously read touch data.
  • If there is a touch event, call handle_touch() to handle it and update the display.
  • Update every 20 milliseconds (approximately 50 FPS).

7.2 Exception Handling and Resource Release

xxxxxxxxxx
except KeyboardInterrupt:
    print("User stops the program")
except Exception as e:
    print(f"Program exception: {e}")
finally:
    Display.deinit()
    os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
    time.sleep_ms(100)
    MediaManager.deinit()
  • Capture user interrupts (KeyboardInterrupt) and other exceptions (Exception) and print relevant information.
  • Deinitialize the display, set the exit point to sleep mode, and release media resources.

8. Main program entry

xxxxxxxxxx
if __name__ == "__main__":
    os.exitpoint(os.EXITPOINT_ENABLE)
    main()
Touch point detection
Touch to take a photo

COMPANY

  • About us
  • Team Style
  • Blog

LEARNING & EXPLORATION

  • Tutorials
  • Edge AI hardware
  • Educational robots
  • Embedded intelligent hardware

WHERE TO BUY

  • Yahboom Online Store
  • Amazon
  • Alibaba
  • AliExpress
  • Mercado

TECHNOLOGY SUPPORT

  • Email: support@yahboom.com

BE A DISTRIBUTOR

  • Email: sales@yahboom.com
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文