File size: 7,062 Bytes
7d6de87
 
 
 
 
 
 
 
5569c15
9fdce57
 
7d6de87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5569c15
9fdce57
 
7d6de87
 
 
 
 
 
 
9fdce57
 
5569c15
7d6de87
 
 
 
 
9fdce57
7d6de87
5569c15
9fdce57
 
7d6de87
 
 
 
5569c15
9fdce57
 
7d6de87
 
 
 
 
 
 
 
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Image Classification - Hugging Face Transformers.js</title>

    <script type="module">
        import { pipeline } from 'https://cdn.jsdelivr.net/npm/@xenova/[email protected]';
        // 허깅페이스의 pipeline 모듈을 import하십시오.
        // To-Do: ??? 
        // Make it available globally
        window.pipeline = pipeline;
    </script>

    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">

    <link rel="stylesheet" href="css/styles.css">
</head>

<body>
    <div class="container-main">
        <!-- Page Header -->
        <div class="header">
            
            <div class="header-main-text">
                <h1>Hugging Face Transformers.js</h1>
            </div>
            
        </div>
        <hr> <!-- Separator -->

        <!-- Back to Home button -->
        <div class="row mt-5">
            <div class="col-md-12 text-center">
                <a href="index.html" class="btn btn-outline-secondary"
                    style="color: #3c650b; border-color: #3c650b;">Back to Main Page</a>
            </div>
        </div>

        <!-- Content -->
        <div class="container mt-5">
            <!-- Centered Titles -->
            <div class="text-center">
                <h2>Computer Vision</h2>
                <h4>Mobilevit Image Classification</h4>
            </div>

            <!-- Actual Content of this page -->
            <div id="image-classification-container" class="container mt-4">
                <h5>Classify an Image:</h5>
                <div class="d-flex align-items-center">
                    <label for="imageClassificationURLText" class="mb-0 text-nowrap" style="margin-right: 15px;">Enter
                        image URL:</label>
                    <input type="text" class="form-control flex-grow-1" id="imageClassificationURLText"
                        value="https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/tiger.jpg"
                        placeholder="Enter image" style="margin-right: 15px; margin-left: 15px;">
                    <button id="ClassifyButton" class="btn btn-primary" onclick="classifyImage()">Classify</button>
                </div>
                <div class="mt-4">
                    <h4>Output:</h4>
                    <pre id="outputArea"></pre>
                </div>
            </div>

            <hr> <!-- Line Separator -->

            <div id="image-classification-local-container" class="container mt-4">
                <h5>Classify a Local Image:</h5>
                <div class="d-flex align-items-center">
                    <label for="imageClassificationLocalFile" class="mb-0 text-nowrap"
                        style="margin-right: 15px;">Select Local Image:</label>
                    <input type="file" id="imageClassificationLocalFile" accept="image/*" />
                    <button id="ClassifyButtonLocal" class="btn btn-primary"
                        onclick="classifyImageLocal()">Classify</button>
                </div>
                <div class="mt-4">
                    <h4>Output:</h4>
                    <pre id="outputAreaLocal"></pre>
                </div>
            </div>

            <hr> <!-- Line Separator -->

            <div id="image-classification-top-container" class="container mt-4">
                <h5>Classify an Image and Return Top n Classes:</h5>
                <div class="d-flex align-items-center">
                    <label for="imageClassificationTopURLText" class="mb-0 text-nowrap" style="margin-right: 15px;">Enter
                        image URL:</label>
                    <input type="text" class="form-control flex-grow-1" id="imageClassificationTopURLText"
                        value="https://huggingface.co/datasets/Xenova/transformers.js-docs/resolve/main/tiger.jpg"
                        placeholder="Enter image" style="margin-right: 15px; margin-left: 15px;">
                    <button id="ClassifyTopButton" class="btn btn-primary" onclick="classifyTopImage()">Classify</button>
                </div>
                <div class="mt-4">
                    <h4>Output:</h4>
                    <pre id="outputAreaTop"></pre>
                </div>
            </div>

            <!-- Back to Home button -->
            <div class="row mt-5">
                <div class="col-md-12 text-center">
                    <a href="index.html" class="btn btn-outline-secondary"
                        style="color: #3c650b; border-color: #3c650b;">Back to Main Page</a>
                </div>
            </div>
        </div>
    </div>

    <script>
        let classifier;
        // Initialize the sentiment analysis model
        async function initializeModel() {
            classifier = await pipeline('image-classification', 'Xenova/mobilevit-small', { quantized: false });
            // pipeline 함수를 이용하여 Xenova/mobilevit-small 모델의 인스턴스를 생성하여 이를 classifier에 저정하십시오. 인스턴스 생성 시 quantized 파라미터의 값을 false로 설정하십시오.
            // To-Do: ???
        }
        async function classifyImage() {
            const textFieldValue = document.getElementById("imageClassificationURLText").value.trim();
            const result = await classifier(textFieldValue);
            document.getElementById("outputArea").innerText = JSON.stringify(result, null, 2);
        }
        async function classifyImageLocal() {
            // HTML DOM의 element Id가 imageClassificationLocalFile인 element의 값을 fileInput으로 저장하십시오.
            // To-Do: const fileInput = ???
            const fileInput = document.getElementById("imageClassificationLocalFile");
            const file = fileInput.files[0];
            if (!file) {
                alert('Please select an image file first.');
                return;
            }
            
            const url = URL.createObjectURL(file);
            const result = await classifier(url);
            // classifier에 url을 입력하여 출력된 결과를 result에 저장하십시오. 
            // To-Do: ???
            document.getElementById("outputAreaLocal").innerText = JSON.stringify(result, null, 2);
        }
        async function classifyTopImage() {
            const textFieldValue = document.getElementById("imageClassificationTopURLText").value.trim();
            const result = await classifier(textFieldValue, { topk: 3 });
            // classifier에 textFieldValue를 입력 변수로, topk 파라미터 값을 3으로 설정하여 classifer를 수행하고 그 결과를 result에 저장하십시오.
            // To-Do: ???
            document.getElementById("outputAreaTop").innerText = JSON.stringify(result, null, 2);
        }
        // Initialize the model after the DOM is completely loaded
        window.addEventListener("DOMContentLoaded", initializeModel);
    </script>
</body>

</html>