add script detect face
This commit is contained in:
		
							parent
							
								
									d80e7c0957
								
							
						
					
					
						commit
						07d28e24cd
					
				| 
						 | 
				
			
			@ -0,0 +1,8 @@
 | 
			
		|||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Modules\Admin\app\Http\Controllers;
 | 
			
		||||
use App\Traits\AnalyzeData;
 | 
			
		||||
class DataAnalyzer
 | 
			
		||||
{
 | 
			
		||||
    use AnalyzeData;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
import os
 | 
			
		||||
import shutil
 | 
			
		||||
 | 
			
		||||
def organize_files_by_username(folder_path, dest_folder_path):
 | 
			
		||||
    # Lấy danh sách các tệp trong thư mục
 | 
			
		||||
    files = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))]
 | 
			
		||||
    
 | 
			
		||||
    for file in files:
 | 
			
		||||
        # Kiểm tra định dạng tên tệp: <username>_checkin_date.png
 | 
			
		||||
        if "_" in file and file.endswith(".png"):
 | 
			
		||||
            username = file.split("_")[0]  # Lấy phần username từ tên tệp
 | 
			
		||||
            
 | 
			
		||||
            # Tạo đường dẫn thư mục con
 | 
			
		||||
            subfolder_path = os.path.join(folder_path, username)
 | 
			
		||||
            
 | 
			
		||||
            # Tạo thư mục con nếu chưa tồn tại
 | 
			
		||||
            if not os.path.exists(subfolder_path):
 | 
			
		||||
                os.makedirs(subfolder_path)
 | 
			
		||||
            
 | 
			
		||||
            # Di chuyển tệp vào thư mục con
 | 
			
		||||
            shutil.move(os.path.join(folder_path, file), os.path.join(subfolder_path, file))
 | 
			
		||||
    
 | 
			
		||||
    print("Hoàn thành sắp xếp tệp theo username.")
 | 
			
		||||
 | 
			
		||||
# Đường dẫn tới thư mục chứa các tệp
 | 
			
		||||
folder_path = "/home/joseph/screenshot"
 | 
			
		||||
dest_folder_path = "/home/joseph/DetectFace/dataset"
 | 
			
		||||
organize_files_by_username(folder_path, dest_folder_path)
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 390 KiB  | 
| 
						 | 
				
			
			@ -0,0 +1,66 @@
 | 
			
		|||
import tensorflow as tf
 | 
			
		||||
import numpy as np
 | 
			
		||||
import cv2
 | 
			
		||||
import os
 | 
			
		||||
from tensorflow.keras import layers, models
 | 
			
		||||
from sklearn.model_selection import train_test_split
 | 
			
		||||
 | 
			
		||||
# 1. Load dữ liệu
 | 
			
		||||
def load_data(data_dir):
 | 
			
		||||
    images = []
 | 
			
		||||
    labels = []
 | 
			
		||||
    for label, folder in enumerate(os.listdir(data_dir)):
 | 
			
		||||
        folder_path = os.path.join(data_dir, folder)
 | 
			
		||||
        for file in os.listdir(folder_path):
 | 
			
		||||
            img_path = os.path.join(folder_path, file)
 | 
			
		||||
            img = cv2.imread(img_path)
 | 
			
		||||
            img = cv2.resize(img, (128, 128))  # Resize về kích thước cố định
 | 
			
		||||
            images.append(img)
 | 
			
		||||
            labels.append(label)
 | 
			
		||||
    images = np.array(images) / 255.0  # Chuẩn hóa
 | 
			
		||||
    labels = np.array(labels)
 | 
			
		||||
    return images, labels
 | 
			
		||||
 | 
			
		||||
# Đường dẫn dữ liệu
 | 
			
		||||
data_dir = '/home/joseph/DetectFace/dataset'
 | 
			
		||||
images, labels = load_data(data_dir)
 | 
			
		||||
 | 
			
		||||
# Chia dữ liệu train/test
 | 
			
		||||
X_train, X_test, y_train, y_test = train_test_split(images, labels, test_size=0.2, random_state=42)
 | 
			
		||||
 | 
			
		||||
# 2. Tạo mô hình phát hiện khuôn mặt
 | 
			
		||||
model = models.Sequential([
 | 
			
		||||
    layers.Conv2D(32, (3, 3), activation='relu', input_shape=(128, 128, 3)),
 | 
			
		||||
    layers.MaxPooling2D((2, 2)),
 | 
			
		||||
    layers.Conv2D(64, (3, 3), activation='relu'),
 | 
			
		||||
    layers.MaxPooling2D((2, 2)),
 | 
			
		||||
    layers.Conv2D(128, (3, 3), activation='relu'),
 | 
			
		||||
    layers.Flatten(),
 | 
			
		||||
    layers.Dense(128, activation='relu'),
 | 
			
		||||
    layers.Dense(len(set(labels)), activation='softmax')  # Số lớp tương ứng số nhãn
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
# Compile mô hình
 | 
			
		||||
model.compile(optimizer='adam',
 | 
			
		||||
              loss='sparse_categorical_crossentropy',
 | 
			
		||||
              metrics=['accuracy'])
 | 
			
		||||
 | 
			
		||||
# Huấn luyện mô hình
 | 
			
		||||
model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test))
 | 
			
		||||
 | 
			
		||||
# 3. Lưu mô hình
 | 
			
		||||
model.save('face_detection_model.h5')
 | 
			
		||||
 | 
			
		||||
# 4. Sử dụng mô hình để dự đoán
 | 
			
		||||
def predict_face(image_path, model_path='face_detection_model.h5'):
 | 
			
		||||
    model = tf.keras.models.load_model(model_path)
 | 
			
		||||
    img = cv2.imread(image_path)
 | 
			
		||||
    img_resized = cv2.resize(img, (128, 128)) / 255.0
 | 
			
		||||
    img_resized = np.expand_dims(img_resized, axis=0)
 | 
			
		||||
    prediction = model.predict(img_resized)
 | 
			
		||||
    return np.argmax(prediction), np.max(prediction)
 | 
			
		||||
 | 
			
		||||
# Test với một ảnh
 | 
			
		||||
image_path = '/home/joseph/DetectFace/test/NGUYEN\ HOANG\ VI_check\ in_at_2024_09_05_11_31_24.png'
 | 
			
		||||
label, confidence = predict_face(image_path)
 | 
			
		||||
print(f"Detected label: {label}, Confidence: {confidence:.2f}")
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,425 @@
 | 
			
		|||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
{ # this ensures the entire script is downloaded #
 | 
			
		||||
 | 
			
		||||
nvm_has() {
 | 
			
		||||
  type "$1" > /dev/null 2>&1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nvm_default_install_dir() {
 | 
			
		||||
  [ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nvm_install_dir() {
 | 
			
		||||
  if [ -n "$NVM_DIR" ]; then
 | 
			
		||||
    printf %s "${NVM_DIR}"
 | 
			
		||||
  else
 | 
			
		||||
    nvm_default_install_dir
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nvm_latest_version() {
 | 
			
		||||
  echo "v0.35.0"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nvm_profile_is_bash_or_zsh() {
 | 
			
		||||
  local TEST_PROFILE
 | 
			
		||||
  TEST_PROFILE="${1-}"
 | 
			
		||||
  case "${TEST_PROFILE-}" in
 | 
			
		||||
    *"/.bashrc" | *"/.bash_profile" | *"/.zshrc")
 | 
			
		||||
      return
 | 
			
		||||
    ;;
 | 
			
		||||
    *)
 | 
			
		||||
      return 1
 | 
			
		||||
    ;;
 | 
			
		||||
  esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Outputs the location to NVM depending on:
 | 
			
		||||
# * The availability of $NVM_SOURCE
 | 
			
		||||
# * The method used ("script" or "git" in the script, defaults to "git")
 | 
			
		||||
# NVM_SOURCE always takes precedence unless the method is "script-nvm-exec"
 | 
			
		||||
#
 | 
			
		||||
nvm_source() {
 | 
			
		||||
  local NVM_METHOD
 | 
			
		||||
  NVM_METHOD="$1"
 | 
			
		||||
  local NVM_SOURCE_URL
 | 
			
		||||
  NVM_SOURCE_URL="$NVM_SOURCE"
 | 
			
		||||
  if [ "_$NVM_METHOD" = "_script-nvm-exec" ]; then
 | 
			
		||||
    NVM_SOURCE_URL="https://raw.githubusercontent.com/nvm-sh/nvm/$(nvm_latest_version)/nvm-exec"
 | 
			
		||||
  elif [ "_$NVM_METHOD" = "_script-nvm-bash-completion" ]; then
 | 
			
		||||
    NVM_SOURCE_URL="https://raw.githubusercontent.com/nvm-sh/nvm/$(nvm_latest_version)/bash_completion"
 | 
			
		||||
  elif [ -z "$NVM_SOURCE_URL" ]; then
 | 
			
		||||
    if [ "_$NVM_METHOD" = "_script" ]; then
 | 
			
		||||
      NVM_SOURCE_URL="https://raw.githubusercontent.com/nvm-sh/nvm/$(nvm_latest_version)/nvm.sh"
 | 
			
		||||
    elif [ "_$NVM_METHOD" = "_git" ] || [ -z "$NVM_METHOD" ]; then
 | 
			
		||||
      NVM_SOURCE_URL="https://github.com/nvm-sh/nvm.git"
 | 
			
		||||
    else
 | 
			
		||||
      echo >&2 "Unexpected value \"$NVM_METHOD\" for \$NVM_METHOD"
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  echo "$NVM_SOURCE_URL"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Node.js version to install
 | 
			
		||||
#
 | 
			
		||||
nvm_node_version() {
 | 
			
		||||
  echo "$NODE_VERSION"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nvm_download() {
 | 
			
		||||
  if nvm_has "curl"; then
 | 
			
		||||
    curl --compressed -q "$@"
 | 
			
		||||
  elif nvm_has "wget"; then
 | 
			
		||||
    # Emulate curl with wget
 | 
			
		||||
    ARGS=$(echo "$*" | command sed -e 's/--progress-bar /--progress=bar /' \
 | 
			
		||||
                            -e 's/-L //' \
 | 
			
		||||
                            -e 's/--compressed //' \
 | 
			
		||||
                            -e 's/-I /--server-response /' \
 | 
			
		||||
                            -e 's/-s /-q /' \
 | 
			
		||||
                            -e 's/-o /-O /' \
 | 
			
		||||
                            -e 's/-C - /-c /')
 | 
			
		||||
    # shellcheck disable=SC2086
 | 
			
		||||
    eval wget $ARGS
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
install_nvm_from_git() {
 | 
			
		||||
  local INSTALL_DIR
 | 
			
		||||
  INSTALL_DIR="$(nvm_install_dir)"
 | 
			
		||||
 | 
			
		||||
  if [ -d "$INSTALL_DIR/.git" ]; then
 | 
			
		||||
    echo "=> nvm is already installed in $INSTALL_DIR, trying to update using git"
 | 
			
		||||
    command printf '\r=> '
 | 
			
		||||
    command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" fetch origin tag "$(nvm_latest_version)" --depth=1 2> /dev/null || {
 | 
			
		||||
      echo >&2 "Failed to update nvm, run 'git fetch' in $INSTALL_DIR yourself."
 | 
			
		||||
      exit 1
 | 
			
		||||
    }
 | 
			
		||||
  else
 | 
			
		||||
    # Cloning to $INSTALL_DIR
 | 
			
		||||
    echo "=> Downloading nvm from git to '$INSTALL_DIR'"
 | 
			
		||||
    command printf '\r=> '
 | 
			
		||||
    mkdir -p "${INSTALL_DIR}"
 | 
			
		||||
    if [ "$(ls -A "${INSTALL_DIR}")" ]; then
 | 
			
		||||
      command git init "${INSTALL_DIR}" || {
 | 
			
		||||
        echo >&2 'Failed to initialize nvm repo. Please report this!'
 | 
			
		||||
        exit 2
 | 
			
		||||
      }
 | 
			
		||||
      command git --git-dir="${INSTALL_DIR}/.git" remote add origin "$(nvm_source)" 2> /dev/null \
 | 
			
		||||
        || command git --git-dir="${INSTALL_DIR}/.git" remote set-url origin "$(nvm_source)" || {
 | 
			
		||||
        echo >&2 'Failed to add remote "origin" (or set the URL). Please report this!'
 | 
			
		||||
        exit 2
 | 
			
		||||
      }
 | 
			
		||||
      command git --git-dir="${INSTALL_DIR}/.git" fetch origin tag "$(nvm_latest_version)" --depth=1 || {
 | 
			
		||||
        echo >&2 'Failed to fetch origin with tags. Please report this!'
 | 
			
		||||
        exit 2
 | 
			
		||||
      }
 | 
			
		||||
    else
 | 
			
		||||
      command git -c advice.detachedHead=false clone "$(nvm_source)" -b "$(nvm_latest_version)" --depth=1 "${INSTALL_DIR}" || {
 | 
			
		||||
        echo >&2 'Failed to clone nvm repo. Please report this!'
 | 
			
		||||
        exit 2
 | 
			
		||||
      }
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  command git -c advice.detachedHead=false --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" checkout -f --quiet "$(nvm_latest_version)"
 | 
			
		||||
  if [ -n "$(command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" show-ref refs/heads/master)" ]; then
 | 
			
		||||
    if command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch --quiet 2>/dev/null; then
 | 
			
		||||
      command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch --quiet -D master >/dev/null 2>&1
 | 
			
		||||
    else
 | 
			
		||||
      echo >&2 "Your version of git is out of date. Please update it!"
 | 
			
		||||
      command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" branch -D master >/dev/null 2>&1
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  echo "=> Compressing and cleaning up git repository"
 | 
			
		||||
  if ! command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" reflog expire --expire=now --all; then
 | 
			
		||||
    echo >&2 "Your version of git is out of date. Please update it!"
 | 
			
		||||
  fi
 | 
			
		||||
  if ! command git --git-dir="$INSTALL_DIR"/.git --work-tree="$INSTALL_DIR" gc --auto --aggressive --prune=now ; then
 | 
			
		||||
    echo >&2 "Your version of git is out of date. Please update it!"
 | 
			
		||||
  fi
 | 
			
		||||
  return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Automatically install Node.js
 | 
			
		||||
#
 | 
			
		||||
nvm_install_node() {
 | 
			
		||||
  local NODE_VERSION_LOCAL
 | 
			
		||||
  NODE_VERSION_LOCAL="$(nvm_node_version)"
 | 
			
		||||
 | 
			
		||||
  if [ -z "$NODE_VERSION_LOCAL" ]; then
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  echo "=> Installing Node.js version $NODE_VERSION_LOCAL"
 | 
			
		||||
  nvm install "$NODE_VERSION_LOCAL"
 | 
			
		||||
  local CURRENT_NVM_NODE
 | 
			
		||||
 | 
			
		||||
  CURRENT_NVM_NODE="$(nvm_version current)"
 | 
			
		||||
  if [ "$(nvm_version "$NODE_VERSION_LOCAL")" == "$CURRENT_NVM_NODE" ]; then
 | 
			
		||||
    echo "=> Node.js version $NODE_VERSION_LOCAL has been successfully installed"
 | 
			
		||||
  else
 | 
			
		||||
    echo >&2 "Failed to install Node.js $NODE_VERSION_LOCAL"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
install_nvm_as_script() {
 | 
			
		||||
  local INSTALL_DIR
 | 
			
		||||
  INSTALL_DIR="$(nvm_install_dir)"
 | 
			
		||||
  local NVM_SOURCE_LOCAL
 | 
			
		||||
  NVM_SOURCE_LOCAL="$(nvm_source script)"
 | 
			
		||||
  local NVM_EXEC_SOURCE
 | 
			
		||||
  NVM_EXEC_SOURCE="$(nvm_source script-nvm-exec)"
 | 
			
		||||
  local NVM_BASH_COMPLETION_SOURCE
 | 
			
		||||
  NVM_BASH_COMPLETION_SOURCE="$(nvm_source script-nvm-bash-completion)"
 | 
			
		||||
 | 
			
		||||
  # Downloading to $INSTALL_DIR
 | 
			
		||||
  mkdir -p "$INSTALL_DIR"
 | 
			
		||||
  if [ -f "$INSTALL_DIR/nvm.sh" ]; then
 | 
			
		||||
    echo "=> nvm is already installed in $INSTALL_DIR, trying to update the script"
 | 
			
		||||
  else
 | 
			
		||||
    echo "=> Downloading nvm as script to '$INSTALL_DIR'"
 | 
			
		||||
  fi
 | 
			
		||||
  nvm_download -s "$NVM_SOURCE_LOCAL" -o "$INSTALL_DIR/nvm.sh" || {
 | 
			
		||||
    echo >&2 "Failed to download '$NVM_SOURCE_LOCAL'"
 | 
			
		||||
    return 1
 | 
			
		||||
  } &
 | 
			
		||||
  nvm_download -s "$NVM_EXEC_SOURCE" -o "$INSTALL_DIR/nvm-exec" || {
 | 
			
		||||
    echo >&2 "Failed to download '$NVM_EXEC_SOURCE'"
 | 
			
		||||
    return 2
 | 
			
		||||
  } &
 | 
			
		||||
  nvm_download -s "$NVM_BASH_COMPLETION_SOURCE" -o "$INSTALL_DIR/bash_completion" || {
 | 
			
		||||
    echo >&2 "Failed to download '$NVM_BASH_COMPLETION_SOURCE'"
 | 
			
		||||
    return 2
 | 
			
		||||
  } &
 | 
			
		||||
  for job in $(jobs -p | command sort)
 | 
			
		||||
  do
 | 
			
		||||
    wait "$job" || return $?
 | 
			
		||||
  done
 | 
			
		||||
  chmod a+x "$INSTALL_DIR/nvm-exec" || {
 | 
			
		||||
    echo >&2 "Failed to mark '$INSTALL_DIR/nvm-exec' as executable"
 | 
			
		||||
    return 3
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nvm_try_profile() {
 | 
			
		||||
  if [ -z "${1-}" ] || [ ! -f "${1}" ]; then
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  echo "${1}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Detect profile file if not specified as environment variable
 | 
			
		||||
# (eg: PROFILE=~/.myprofile)
 | 
			
		||||
# The echo'ed path is guaranteed to be an existing file
 | 
			
		||||
# Otherwise, an empty string is returned
 | 
			
		||||
#
 | 
			
		||||
nvm_detect_profile() {
 | 
			
		||||
  if [ "${PROFILE-}" = '/dev/null' ]; then
 | 
			
		||||
    # the user has specifically requested NOT to have nvm touch their profile
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ -n "${PROFILE}" ] && [ -f "${PROFILE}" ]; then
 | 
			
		||||
    echo "${PROFILE}"
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  local DETECTED_PROFILE
 | 
			
		||||
  DETECTED_PROFILE=''
 | 
			
		||||
 | 
			
		||||
  if [ -n "${BASH_VERSION-}" ]; then
 | 
			
		||||
    if [ -f "$HOME/.bashrc" ]; then
 | 
			
		||||
      DETECTED_PROFILE="$HOME/.bashrc"
 | 
			
		||||
    elif [ -f "$HOME/.bash_profile" ]; then
 | 
			
		||||
      DETECTED_PROFILE="$HOME/.bash_profile"
 | 
			
		||||
    fi
 | 
			
		||||
  elif [ -n "${ZSH_VERSION-}" ]; then
 | 
			
		||||
    DETECTED_PROFILE="$HOME/.zshrc"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ -z "$DETECTED_PROFILE" ]; then
 | 
			
		||||
    for EACH_PROFILE in ".profile" ".bashrc" ".bash_profile" ".zshrc"
 | 
			
		||||
    do
 | 
			
		||||
      if DETECTED_PROFILE="$(nvm_try_profile "${HOME}/${EACH_PROFILE}")"; then
 | 
			
		||||
        break
 | 
			
		||||
      fi
 | 
			
		||||
    done
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ -n "$DETECTED_PROFILE" ]; then
 | 
			
		||||
    echo "$DETECTED_PROFILE"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Check whether the user has any globally-installed npm modules in their system
 | 
			
		||||
# Node, and warn them if so.
 | 
			
		||||
#
 | 
			
		||||
nvm_check_global_modules() {
 | 
			
		||||
  command -v npm >/dev/null 2>&1 || return 0
 | 
			
		||||
 | 
			
		||||
  local NPM_VERSION
 | 
			
		||||
  NPM_VERSION="$(npm --version)"
 | 
			
		||||
  NPM_VERSION="${NPM_VERSION:--1}"
 | 
			
		||||
  [ "${NPM_VERSION%%[!-0-9]*}" -gt 0 ] || return 0
 | 
			
		||||
 | 
			
		||||
  local NPM_GLOBAL_MODULES
 | 
			
		||||
  NPM_GLOBAL_MODULES="$(
 | 
			
		||||
    npm list -g --depth=0 |
 | 
			
		||||
    command sed -e '/ npm@/d' -e '/ (empty)$/d'
 | 
			
		||||
  )"
 | 
			
		||||
 | 
			
		||||
  local MODULE_COUNT
 | 
			
		||||
  MODULE_COUNT="$(
 | 
			
		||||
    command printf %s\\n "$NPM_GLOBAL_MODULES" |
 | 
			
		||||
    command sed -ne '1!p' |                     # Remove the first line
 | 
			
		||||
    wc -l | command tr -d ' '                   # Count entries
 | 
			
		||||
  )"
 | 
			
		||||
 | 
			
		||||
  if [ "${MODULE_COUNT}" != '0' ]; then
 | 
			
		||||
    # shellcheck disable=SC2016
 | 
			
		||||
    echo '=> You currently have modules installed globally with `npm`. These will no'
 | 
			
		||||
    # shellcheck disable=SC2016
 | 
			
		||||
    echo '=> longer be linked to the active version of Node when you install a new node'
 | 
			
		||||
    # shellcheck disable=SC2016
 | 
			
		||||
    echo '=> with `nvm`; and they may (depending on how you construct your `$PATH`)'
 | 
			
		||||
    # shellcheck disable=SC2016
 | 
			
		||||
    echo '=> override the binaries of modules installed with `nvm`:'
 | 
			
		||||
    echo
 | 
			
		||||
 | 
			
		||||
    command printf %s\\n "$NPM_GLOBAL_MODULES"
 | 
			
		||||
    echo '=> If you wish to uninstall them at a later point (or re-install them under your'
 | 
			
		||||
    # shellcheck disable=SC2016
 | 
			
		||||
    echo '=> `nvm` Nodes), you can remove them from the system Node as follows:'
 | 
			
		||||
    echo
 | 
			
		||||
    echo '     $ nvm use system'
 | 
			
		||||
    echo '     $ npm uninstall -g a_module'
 | 
			
		||||
    echo
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
nvm_do_install() {
 | 
			
		||||
  if [ -n "${NVM_DIR-}" ] && ! [ -d "${NVM_DIR}" ]; then
 | 
			
		||||
    if [ -e "${NVM_DIR}" ]; then
 | 
			
		||||
      echo >&2 "File \"${NVM_DIR}\" has the same name as installation directory."
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if [ "${NVM_DIR}" = "$(nvm_default_install_dir)" ]; then
 | 
			
		||||
      mkdir "${NVM_DIR}"
 | 
			
		||||
    else
 | 
			
		||||
      echo >&2 "You have \$NVM_DIR set to \"${NVM_DIR}\", but that directory does not exist. Check your profile files and environment."
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  if [ -z "${METHOD}" ]; then
 | 
			
		||||
    # Autodetect install method
 | 
			
		||||
    if nvm_has git; then
 | 
			
		||||
      install_nvm_from_git
 | 
			
		||||
    elif nvm_has nvm_download; then
 | 
			
		||||
      install_nvm_as_script
 | 
			
		||||
    else
 | 
			
		||||
      echo >&2 'You need git, curl, or wget to install nvm'
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
  elif [ "${METHOD}" = 'git' ]; then
 | 
			
		||||
    if ! nvm_has git; then
 | 
			
		||||
      echo >&2 "You need git to install nvm"
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
    install_nvm_from_git
 | 
			
		||||
  elif [ "${METHOD}" = 'script' ]; then
 | 
			
		||||
    if ! nvm_has nvm_download; then
 | 
			
		||||
      echo >&2 "You need curl or wget to install nvm"
 | 
			
		||||
      exit 1
 | 
			
		||||
    fi
 | 
			
		||||
    install_nvm_as_script
 | 
			
		||||
  else
 | 
			
		||||
    echo >&2 "The environment variable \$METHOD is set to \"${METHOD}\", which is not recognized as a valid installation method."
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  echo
 | 
			
		||||
 | 
			
		||||
  local NVM_PROFILE
 | 
			
		||||
  NVM_PROFILE="$(nvm_detect_profile)"
 | 
			
		||||
  local PROFILE_INSTALL_DIR
 | 
			
		||||
  PROFILE_INSTALL_DIR="$(nvm_install_dir | command sed "s:^$HOME:\$HOME:")"
 | 
			
		||||
 | 
			
		||||
  SOURCE_STR="\\nexport NVM_DIR=\"${PROFILE_INSTALL_DIR}\"\\n[ -s \"\$NVM_DIR/nvm.sh\" ] && \\. \"\$NVM_DIR/nvm.sh\"  # This loads nvm\\n"
 | 
			
		||||
 | 
			
		||||
  # shellcheck disable=SC2016
 | 
			
		||||
  COMPLETION_STR='[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion\n'
 | 
			
		||||
  BASH_OR_ZSH=false
 | 
			
		||||
 | 
			
		||||
  if [ -z "${NVM_PROFILE-}" ] ; then
 | 
			
		||||
    local TRIED_PROFILE
 | 
			
		||||
    if [ -n "${PROFILE}" ]; then
 | 
			
		||||
      TRIED_PROFILE="${NVM_PROFILE} (as defined in \$PROFILE), "
 | 
			
		||||
    fi
 | 
			
		||||
    echo "=> Profile not found. Tried ${TRIED_PROFILE-}~/.bashrc, ~/.bash_profile, ~/.zshrc, and ~/.profile."
 | 
			
		||||
    echo "=> Create one of them and run this script again"
 | 
			
		||||
    echo "   OR"
 | 
			
		||||
    echo "=> Append the following lines to the correct file yourself:"
 | 
			
		||||
    command printf "${SOURCE_STR}"
 | 
			
		||||
    echo
 | 
			
		||||
  else
 | 
			
		||||
    if nvm_profile_is_bash_or_zsh "${NVM_PROFILE-}"; then
 | 
			
		||||
      BASH_OR_ZSH=true
 | 
			
		||||
    fi
 | 
			
		||||
    if ! command grep -qc '/nvm.sh' "$NVM_PROFILE"; then
 | 
			
		||||
      echo "=> Appending nvm source string to $NVM_PROFILE"
 | 
			
		||||
      command printf "${SOURCE_STR}" >> "$NVM_PROFILE"
 | 
			
		||||
    else
 | 
			
		||||
      echo "=> nvm source string already in ${NVM_PROFILE}"
 | 
			
		||||
    fi
 | 
			
		||||
    # shellcheck disable=SC2016
 | 
			
		||||
    if ${BASH_OR_ZSH} && ! command grep -qc '$NVM_DIR/bash_completion' "$NVM_PROFILE"; then
 | 
			
		||||
      echo "=> Appending bash_completion source string to $NVM_PROFILE"
 | 
			
		||||
      command printf "$COMPLETION_STR" >> "$NVM_PROFILE"
 | 
			
		||||
    else
 | 
			
		||||
      echo "=> bash_completion source string already in ${NVM_PROFILE}"
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  if ${BASH_OR_ZSH} && [ -z "${NVM_PROFILE-}" ] ; then
 | 
			
		||||
    echo "=> Please also append the following lines to the if you are using bash/zsh shell:"
 | 
			
		||||
    command printf "${COMPLETION_STR}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Source nvm
 | 
			
		||||
  # shellcheck source=/dev/null
 | 
			
		||||
  \. "$(nvm_install_dir)/nvm.sh"
 | 
			
		||||
 | 
			
		||||
  nvm_check_global_modules
 | 
			
		||||
 | 
			
		||||
  nvm_install_node
 | 
			
		||||
 | 
			
		||||
  nvm_reset
 | 
			
		||||
 | 
			
		||||
  echo "=> Close and reopen your terminal to start using nvm or run the following to use it now:"
 | 
			
		||||
  command printf "${SOURCE_STR}"
 | 
			
		||||
  if ${BASH_OR_ZSH} ; then
 | 
			
		||||
    command printf "${COMPLETION_STR}"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Unsets the various functions defined
 | 
			
		||||
# during the execution of the install script
 | 
			
		||||
#
 | 
			
		||||
nvm_reset() {
 | 
			
		||||
  unset -f nvm_has nvm_install_dir nvm_latest_version nvm_profile_is_bash_or_zsh \
 | 
			
		||||
    nvm_source nvm_node_version nvm_download install_nvm_from_git nvm_install_node \
 | 
			
		||||
    install_nvm_as_script nvm_try_profile nvm_detect_profile nvm_check_global_modules \
 | 
			
		||||
    nvm_do_install nvm_reset nvm_default_install_dir
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[ "_$NVM_ENV" = "_testing" ] || nvm_do_install
 | 
			
		||||
 | 
			
		||||
} # this ensures the entire script is downloaded #
 | 
			
		||||
		Loading…
	
		Reference in New Issue