FIRST_UPLOAD

This commit is contained in:
beabigegg
2025-07-17 15:56:04 +08:00
commit ede5af22f8
9 changed files with 1692 additions and 0 deletions

118
README.md Normal file
View File

@@ -0,0 +1,118 @@
# Wafer Map Pro
Wafer Map Pro is a modern, web-based tool designed for the visualization and interactive editing of semiconductor wafer maps. Built with a Python Flask backend and a dynamic HTML5 Canvas frontend, it provides a fluid and intuitive user experience for engineers and technicians working with wafer data.
---
## ✨ Features
- **Interactive Canvas Renderer**: The wafer map is rendered on an HTML5 Canvas, allowing for smooth and efficient handling of large datasets.
- **Dynamic Pan & Zoom**: Effortlessly navigate the wafer map by clicking and dragging to pan, and using the mouse wheel to zoom in on areas of interest.
- **Advanced Selection Tools**:
- **Single Die**: Click to select a single die.
- **Multi-Select**: Hold `Ctrl` while clicking to select multiple, non-contiguous dies.
- **Region/Box Select**: Hold `Shift` and drag the mouse to select a rectangular area of dies.
- **Bin Code Editing**: Instantly change the bin code (`Good`, `NG`, `Dummy`, `Ignore`) of any selected die or region.
- **Map Transformation**: Rotate the entire wafer map 90 degrees clockwise with a single click.
- **Real-Time Data Analysis**: A persistent display shows the live count of each bin code, updating automatically after every edit.
- **File Handling**:
- Upload wafer maps from simple `.txt` files.
- Download the edited wafer map, preserving its structure.
- **Modern UI/UX**:
- A sleek dark mode theme reduces eye strain.
- A professional sidebar layout keeps controls organized and the map view unobstructed.
- Smooth animations and transitions provide a polished user experience.
---
## 🛠️ Tech Stack
- **Backend**:
- **Python 3**
- **Flask**: A lightweight web framework for serving the application and handling API requests.
- **NumPy**: Used for efficient numerical operations and array manipulations (e.g., map rotation).
- **Frontend**:
- **HTML5**
- **CSS3**: For modern styling, animations, and the dark theme.
- **JavaScript (Vanilla)**: Powers all the client-side interactivity, including the canvas rendering engine, event handling, and API communication.
---
## 🚀 Getting Started
Follow these instructions to get a copy of the project up and running on your local machine.
### Prerequisites
- Python 3.6 or higher
- pip (Python package installer)
### Installation
1. **Clone the repository to your local machine:**
```bash
git clone https://github.com/your-username/wafer-map-pro.git
cd wafer-map-pro
```
2. **Create and activate a virtual environment (recommended):**
```bash
# For Windows
python -m venv venv
.\venv\Scripts\activate
# For macOS/Linux
python3 -m venv venv
source venv/bin/activate
```
3. **Install the required Python packages:**
```bash
pip install -r requirements.txt
```
4. **Run the Flask application:**
```bash
python app.py
```
5. **Open your web browser** and navigate to the following address:
[http://127.0.0.1:5000](http://127.0.0.1:5000)
---
## 📖 How to Use
1. **Step 1: Upload File**
- Click the file input area or drag and drop a `.txt` file containing your wafer map data.
- Click "Upload & Analyze".
2. **Step 2: Define Bin Codes**
- The application will automatically detect all unique characters in your file.
- For each character, use the dropdown menu to assign its corresponding bin type (`Good`, `NG`, `Dummy`, or `Ignore`).
- Click "Generate Map".
3. **Step 3: Interact and Edit**
- Your wafer map will be displayed in the main view.
- Use the controls to **Pan**, **Zoom**, **Select**, **Edit**, and **Rotate** the map.
- The bin code counts will update in real-time.
- The hint `Pro-tip: Hold Shift and drag to select a region.` is provided for quick reference.
4. **Step 4: Download**
- Once you have finished editing, click the "Download .txt" button to save your work. A new text file with the updated map will be downloaded.
---
### Expected `.txt` File Format
The application expects a simple text file where each character represents a die. Spacing is used to separate dies. The parser is designed to handle non-uniform rows and columns gracefully.
**Example:**
```
1111
112211
11222211
11222211
112211
1111
```